PHP Itérer plusieurs tableaux ensemble


Exemple

Parfois, deux tableaux de même longueur doivent être itérés ensemble, par exemple:

$people = ['Tim', 'Tony', 'Turanga'];
$foods = ['chicken', 'beef', 'slurm'];

array_map est le moyen le plus simple d'y parvenir:

array_map(function($person, $food) {
    return "$person likes $food\n";
}, $people, $foods);

qui produira:

Tim likes chicken
Tony likes beef
Turanga likes slurm

Cela peut être fait via un index commun:

assert(count($people) === count($foods));
for ($i = 0; $i < count($people); $i++) {
    echo "$people[$i] likes $foods[$i]\n";
}

Si les deux tableaux n'ont pas les clés incrémentielles, array_values($array)[$i] peut être utilisé pour remplacer $array[$i] .

Si les deux tableaux ont le même ordre de clés, vous pouvez également utiliser une boucle foreach-with-key sur l'un des tableaux:

foreach ($people as $index => $person) {
    $food = $foods[$index];
    echo "$person likes $food\n";
}

Les tableaux séparés ne peuvent être mis en boucle que s'ils ont la même longueur et ont le même nom de clé. Cela signifie que si vous ne fournissez pas de clé et que celles-ci sont numérotées, tout ira bien ou si vous nommez les clés et les mettez dans le même ordre dans chaque tableau.

Vous pouvez également utiliser array_combine .

$combinedArray = array_combine($people, $foods);
// $combinedArray = ['Tim' => 'chicken', 'Tony' => 'beef', 'Turanga' => 'slurm'];

Ensuite, vous pouvez parcourir ceci en procédant comme avant:

foreach ($combinedArray as $person => $meal) {
    echo "$person likes $meal\n";
}