如何一次循环两个数组?

如何一次循环两个数组?

我试图将两个数组排列在一起,结果不一致。我会告诉你我的代码,我得到的结果以及我正在寻找的结果。


我想我只是做错了但不知道怎么做。


我的代码:


$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: 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


Cats萌萌
浏览 1352回答 2
2回答

Helenr

使用1中的键获取2中的行foreach($data1&nbsp;as&nbsp;$k=>&nbsp;$item1){ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;$item1&nbsp;.&nbsp;'<br/>'; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;$data2[$k]&nbsp;.&nbsp;'<br/>'; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;'<br/><br/>';}

桃花长相依

问题那么问题当然是你的嵌套foreach循环。因为对于$data1数组的每个元素,你遍历整个$data2数组(所以总共有$data1*&nbsp;$data2迭代)。解决方案要解决这个问题,您必须立即遍历两个数组。array_map()方法(PHP> = 5.3)您可以使用array_map()并将所有数组传递给它,同时将它循环到它。array_map(function($v1,&nbsp;$v2){ &nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;$v1&nbsp;.&nbsp;"<br>"; &nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;$v2&nbsp;.&nbsp;"<br><br>";},&nbsp;$data1,&nbsp;$data2&nbsp;/*&nbsp;,&nbsp;Add&nbsp;more&nbsp;arrays&nbsp;if&nbsp;needed&nbsp;manually&nbsp;*/);注意:如果元素数量不均匀,您将不会产生任何错误,它只会打印NULL(意味着您将看不到任何内容)MultipleIterator方法(PHP> = 5.3)使用MultipleIterator和连接尽可能多的ArrayIterator,因为你需要。$it&nbsp;=&nbsp;new&nbsp;MultipleIterator();$it->attachIterator(new&nbsp;ArrayIterator($data1));$it->attachIterator(new&nbsp;ArrayIterator($data2));//Add&nbsp;more&nbsp;arrays&nbsp;if&nbsp;needed&nbsp;foreach($it&nbsp;as&nbsp;$a)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;$a[0]&nbsp;.&nbsp;"<br>"; &nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;$a[1]&nbsp;.&nbsp;"<br><br>";}注意:如果元素数量不均匀,它将只打印两个数组仍具有值的所有值for loop方法(PHP> = 4.3)使用带有计数器变量的for循环,您可以将其用作两个数组的键。$keysOne&nbsp;=&nbsp;array_keys($data1);$keysTwo&nbsp;=&nbsp;array_keys($data2);$min&nbsp;=&nbsp;min(count($data1),&nbsp;count($data2));for($i&nbsp;=&nbsp;0;&nbsp;$i&nbsp;<&nbsp;$min;&nbsp;$i++)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;$data1[$keysOne[$i]]&nbsp;.&nbsp;"<br>"; &nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;$data2[$keysTwo[$i]]&nbsp;.&nbsp;"<br><br>";}注意:使用array_keys()就是如此,如果阵列不具有相同的键或具有关联性,这也适用。min()用于仅循环遍历每个数组所具有的元素array_combine()方法(PHP> = 5.0)或者,如果数组只有唯一值,则可以array_combine()同时使用这两个数组,以便$data1可以作为键和$data2值进行访问。foreach(array_combine($data1,&nbsp;$data2)&nbsp;as&nbsp;$d1&nbsp;=>&nbsp;$d2)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;$d1&nbsp;.&nbsp;"<br>"; &nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;$d2&nbsp;.&nbsp;"<br><br>";}注意:数组必须具有相同数量的元素,否则array_combine()将引发错误call_user_func_array()方法(PHP> = 5.6)如果要同时打印2个以上的数组或只打印未知数量的数组,可以将该array_map()方法与call_user_func_array()调用结合使用。$func&nbsp;=&nbsp;function(...$numbers){ &nbsp;&nbsp;&nbsp;&nbsp;foreach($numbers&nbsp;as&nbsp;$v) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;$v&nbsp;.&nbsp;"<br>"; &nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;"<br>";};call_user_func_array("array_map",&nbsp;[$func,&nbsp;$data1,&nbsp;$data2]);注意:由于这种array_map()方法使用的方法,它的行为与元素数量不均匀的行为相同。此外,由于这种方法只适用于PHP> = 5.6你可以删除参数,改变了$numbers用func_get_args()在foreach循环,然后它也适用于PHP> = 5.3
打开App,查看更多内容
随时随地看视频慕课网APP