如何一次遍历两个数组?

我试图将两个数组排列在一起,结果总是不正确。我将向您展示我的代码,获得的结果以及正在寻找的结果。

我想我只是做错了,但不确定其他方法。

我的代码:

$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

回答:

回答:

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

如果要同时打印两个以上的数组或仅打印未知数量的数组,可以将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使用withfunc_get_args()进行更改,然后它也适用于PHP> = 5.3

以上是 如何一次遍历两个数组? 的全部内容, 来源链接: utcz.com/qa/422056.html

回到顶部