2 回答
TA贡献1780条经验 获得超4个赞
使用1中的键获取2中的行
foreach($data1 as $k=> $item1){ echo $item1 . '<br/>'; echo $data2[$k] . '<br/>'; echo '<br/><br/>';}
TA贡献1860条经验 获得超8个赞
问题
那么问题当然是你的嵌套foreach循环。因为对于$data1
数组的每个元素,你遍历整个$data2
数组(所以总共有$data1
* $data2
迭代)。
解决方案
要解决这个问题,您必须立即遍历两个数组。
array_map()
方法(PHP> = 5.3)
您可以使用array_map()
并将所有数组传递给它,同时将它循环到它。
array_map(function($v1, $v2){ echo $v1 . "<br>"; echo $v2 . "<br><br>";}, $data1, $data2 /* , Add more arrays if needed manually */);
注意:如果元素数量不均匀,您将不会产生任何错误,它只会打印NULL
(意味着您将看不到任何内容)
MultipleIterator
方法(PHP> = 5.3)
使用MultipleIterator
和连接尽可能多的ArrayIterator
,因为你需要。
$it = new MultipleIterator();$it->attachIterator(new ArrayIterator($data1));$it->attachIterator(new ArrayIterator($data2));//Add more arrays if needed foreach($it as $a) { echo $a[0] . "<br>"; echo $a[1] . "<br><br>";}
注意:如果元素数量不均匀,它将只打印两个数组仍具有值的所有值
for loop
方法(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><br>";}
注意:使用array_keys()
就是如此,如果阵列不具有相同的键或具有关联性,这也适用。min()
用于仅循环遍历每个数组所具有的元素
array_combine()
方法(PHP> = 5.0)
或者,如果数组只有唯一值,则可以array_combine()
同时使用这两个数组,以便$data1
可以作为键和$data2
值进行访问。
foreach(array_combine($data1, $data2) as $d1 => $d2) { echo $d1 . "<br>"; echo $d2 . "<br><br>";}
注意:数组必须具有相同数量的元素,否则array_combine()
将引发错误
call_user_func_array()
方法(PHP> = 5.6)
如果要同时打印2个以上的数组或只打印未知数量的数组,可以将该array_map()
方法与call_user_func_array()
调用结合使用。
$func = function(...$numbers){ foreach($numbers as $v) echo $v . "<br>"; echo "<br>";};call_user_func_array("array_map", [$func, $data1, $data2]);
注意:由于这种array_map()
方法使用的方法,它的行为与元素数量不均匀的行为相同。此外,由于这种方法只适用于PHP> = 5.6你可以删除参数,改变了$numbers
用func_get_args()
在foreach循环,然后它也适用于PHP> = 5.3
- 2 回答
- 0 关注
- 1351 浏览
添加回答
举报