同时循环多个数组时,一个常见的问题问题是由于不适当的循环结构,结果可能不正确。考虑以下示例:
$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/>'; } }
上面的代码使用嵌套的 foreach 循环,这会产生以下输出:
a: 1 b: 1 a: 1 b: 2 a: 1 b: 3 a: 1 b: 4 a: 1 b: 5
但是,预期输出是:
a: 1 b: 1 a: 2 b: 2 a: 3 b: 3 a: 4 b: 4 a: 5 b: 5
问题是嵌套循环结构导致 $data1 的每个元素都与 $data2 的每个元素一起循环。为了达到想要的输出,我们需要同时循环两个数组。
要同时循环多个数组,可以使用各种方法:
array_map() 方法 (PHP >=5.3):
此方法允许您传递多个数组和一个回调函数来处理它们的元素。
array_map(function($v1, $v2){ echo $v1 . '<br>'; echo $v2 . '<br>'; }, $data1, $data2);
MultipleIterator 方法 (PHP >=5.3):
此方法创建可用于同时迭代多个数组的多个迭代器对象。
$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>'; }
for Loop with Counter (PHP >=4.3):
此方法使用带有计数器变量的 for 循环来迭代数组。
$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>'; }
array_combine() 方法 (PHP >=5.0):
如果数组有,可以使用此方法独特的价值观。它将数组组合成一个数组,其中 $data1 的元素是键,$data2 的元素是值。
foreach (array_combine($data1, $data2) as $d1 => $d2) { echo $d1 . '<br>'; echo $d2 . '<br>'; }
call_user_func_array() 方法 ( PHP >=5.6):
此方法允许您将多个数组传递给回调函数。
$func = function (...$numbers) { foreach ($numbers as $v) echo $v . '<br>'; echo '<br>'; }; call_user_func_array("array_map", [$func, $data1, $data2]);
以上是如何在 PHP 中同时高效地循环多个数组?的详细内容。更多信息请关注PHP中文网其他相关文章!