为了账号安全,请及时绑定邮箱和手机立即绑定

如何一次循环两个数组?

如何一次循环两个数组?

PHP
Cats萌萌 2019-08-05 15:28:18
如何一次循环两个数组?我试图将两个数组排列在一起,结果不一致。我会告诉你我的代码,我得到的结果以及我正在寻找的结果。我想我只是做错了但不知道怎么做。我的代码:$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/>';    }}结果:(缩短以节省空间)a: 1b: 1a: 1b: 2a: 1b: 3a: 1b: 4a: 1b: 5我正在寻找的结果如下:a: 1b: 1a: 2b: 2a: 3b: 3a: 4b: 4a: 5b: 5
查看完整描述

2 回答

?
Helenr

TA贡献1780条经验 获得超4个赞

使用1中的键获取2中的行

foreach($data1 as $k=> $item1){
        echo $item1 . '<br/>';
        echo $data2[$k] . '<br/>';
        echo '<br/><br/>';}


查看完整回答
1 反对 回复 2019-08-05
?
桃花长相依

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你可以删除参数,改变了$numbersfunc_get_args()在foreach循环,然后它也适用于PHP> = 5.3


查看完整回答
反对 回复 2019-08-05
  • 2 回答
  • 0 关注
  • 1351 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信