4
votes

Combinez (fusionnez) 2 tableaux par clés et changez le nom des clés dans le tableau de résultats

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 commentaires

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


3 Réponses :


8
votes

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


0 commentaires


0
votes

Vous pouvez sauter le tour supplémentaire de l'itération (lors de la transposition avec 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.

Code: ( Démo )

array (
  0 => 
  array (
    'Value' => '10100153',
    'Number' => 1,
  ),
  1 => 
  array (
    'Value' => '2007',
    'Number' => 2,
  ),
  2 => 
  array (
    'Value' => '350',
    'Number' => 3,
  ),
  ...you get the point
)

Résultat:

$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)
);


0 commentaires