Lors d'une boucle sur plusieurs tableaux simultanément, un problème courant Le problème est que les résultats peuvent être incorrects en raison d'une structure de boucle inappropriée. Prenons l'exemple suivant :
$data1 = ['a: 1', 'a: 2', 'a: 3', 'a: 4', 'a: 5']; $data2 = ['b: 1', 'b: 2', 'b: 3', 'b: 4', 'b: 5']; foreach ($data1 as $item1) { foreach ($data2 as $item2) { echo $item1 . '<br/>'; echo $item2 . '<br/>'; echo '<br/><br/>'; } }
Le code ci-dessus utilise des boucles foreach imbriquées, qui donnent le résultat suivant :
a: 1 b: 1 a: 1 b: 2 a: 1 b: 3 a: 1 b: 4 a: 1 b: 5
Cependant, le résultat attendu est :
a: 1 b: 1 a: 2 b: 2 a: 3 b: 3 a: 4 b: 4 a: 5 b: 5
Le problème est que la structure de boucle imbriquée fait que chaque élément de $data1 est bouclé avec chaque élément de $data2. Pour obtenir le résultat souhaité, nous devons parcourir les deux tableaux simultanément.
Pour parcourir plusieurs tableaux simultanément, vous pouvez utiliser différentes méthodes :
Méthode array_map() (PHP >=5.3) :
Ceci La méthode vous permet de transmettre plusieurs tableaux et une fonction de rappel pour traiter leurs éléments.
array_map(function($v1, $v2){ echo $v1 . '<br>'; echo $v2 . '<br>'; }, $data1, $data2);
Méthode MultipleIterator (PHP >=5.3) :
Cette méthode crée un objet itérateur multiple qui peut être utilisé pour parcourir plusieurs tableaux simultanément.
$it = new MultipleIterator(); $it->attachIterator(new ArrayIterator($data1)); $it->attachIterator(new ArrayIterator($data2)); foreach ($it as $a) { echo $a[0] . '<br>'; echo $a[1] . '<br>'; }
boucle for avec compteur (PHP >=4.3) :
Cette méthode utilise une boucle for avec un compteur variable pour parcourir les deux tableaux.
$keysOne = array_keys($data1); $keysTwo = array_keys($data2); $min = min(count($data1), count($data2)); for ($i = 0; $i < $min; $i++) { echo $data1[$keysOne[$i]] . '<br>'; echo $data2[$keysTwo[$i]] . '<br>'; }
Méthode array_combine() (PHP >=5.0) :
Cette méthode peut être utilisée si les tableaux ont des valeurs uniques. Il combine les tableaux en un seul tableau où les éléments de $data1 sont les clés et les éléments de $data2 sont les valeurs.
foreach (array_combine($data1, $data2) as $d1 => $d2) { echo $d1 . '<br>'; echo $d2 . '<br>'; }
call_user_func_array() Méthode ( PHP >=5.6) :
Cette méthode vous permet de passer plusieurs tableaux à un rappel fonction.
$func = function (...$numbers) { foreach ($numbers as $v) echo $v . '<br>'; echo '<br>'; }; call_user_func_array("array_map", [$func, $data1, $data2]);
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!