栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何一次遍历两个数组?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何一次遍历两个数组?

问题

嗯,问题当然出在您嵌套的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 );

注意: 如果元素数量不均匀,您将不会产生任何错误,它将仅打印

NULL
(意味着您将看不到任何东西)

MultipleIterator
方法(PHP>= 5.3)

使用

MultipleIterator
和连接尽可能多的
ArrayIterator
,因为你需要。

$it = new MultipleIterator();$it->attachIterator(new ArrayIterator($data1));$it->attachIterator(new ArrayIterator($data2));//Add more arrays if neededforeach($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)

如果要同时打印两个以上的数组或仅打印未知数量的数组,可以将

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,因此您只需删除参数并在foreach循环中
$numbers
使用with
func_get_args()
进行更改,然后它也适用于PHP> = 5.3



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/388002.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号