J'ai ces deux tableaux en sortie:
['Value' => '10100153', 'Number' => 1], ['Value' => '2007', 'Number' => 2], ['Value' => '390', 'Number' => 3], ['Value' => '804715', 'Number' => 4], ['Value' => 'WW001', 'Number' => 5], ['Value' => 'WHT/WHT/WHT', 'Number' => 6], ['Value' => '39/42', 'Number' => 7], ['Value' => '804715 WW00139/42', 'Number' => 8], ['Value' => '0.00138857', 'Number' => 9], ['Value' => '3pk Quarter Socks', 'Number' => 10]
Je veux les combiner et changer la valeur de clé du tableau de valeurs en valeur et le tableau de nombres en nombres, donc ça ressemble à ceci:
Sortie désirée
Value Array
(
[0] => 10100153
[1] => 2007
[2] => 350
[3] => 804082
[4] => WW006
[5] => WHT/NNY/OXGM
[6] => 35/38
[7] => 804082 WW00635/38
[8] => 0,00138857
[9] => Champion 3pk Quarter Socks
)
Numbers Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
[4] => 5
[5] => 6
[6] => 7
[7] => 8
[8] => 9
[9] => 10
)
Tout ce que je peux trouver est array_combine et array_merge , mais array_merge ajoute simplement le tableau de nombres à la fin du tableau de valeurs, et array_combine ajoute les nombres à la fin du texte du tableau de valeurs
3 Réponses :
Vous pouvez utiliser array_map ( doc a>) et array_combine ( doc ) comme:
$res = array_map(null, $valuesArray, $numbersArray);
$keys = array("Value", "Number");
$res = array_map(function ($e) use ($keys) {return array_combine($keys, $e);}, $res);
Notez l'utilisation de null dans array_map . De la documentation:
Une utilisation intéressante de cette fonction est de construire un tableau de tableaux, qui peut être facilement exécuté en utilisant NULL comme nom de la fonction de rappel
De cette façon, vous pouvez fusionner plus de tableaux - n'oubliez pas d'ajouter la clé correcte à $keys
Exemple en direct: 3v4l
Vous pouvez sauter le tour supplémentaire de l'itération (lors de la transposition avec Code: ( Démo ) Résultat: array_map (null ...) ) comme démontré dans la réponse de dWinder en passant les deux tableaux d'entrée dans array_map () code > et en utilisant l'opérateur splat pour recevoir les arguments à l'intérieur de la fonction. Mon extrait de code aura la moitié de la complexité de calcul de la solution de dWinder - juste une boucle au lieu de deux. array (
0 =>
array (
'Value' => '10100153',
'Number' => 1,
),
1 =>
array (
'Value' => '2007',
'Number' => 2,
),
2 =>
array (
'Value' => '350',
'Number' => 3,
),
...you get the point
)
$values = ["10100153", "2007", "350", "804082", "WW006", "WHT/NNY/OXGM", "35/38", "804082 WW00635/38", "0,00138857", "Champion 3pk Quarter Socks"];
$numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
$keys = ["Value", "Number"];
var_export(
array_map(function(...$data) use ($keys) {
return array_combine($keys, $data);
}, $values, $numbers)
);
Qu'avez-vous déjà essayé?
une simple boucle for devrait suffire, au moins essayer
Vous devriez pouvoir utiliser array_map ou juste une boucle for