Sar*_* B. 7 php arrays foreach
我试图将两个数组排列在一起,结果不一致.我会告诉你我的代码,我得到的结果以及我正在寻找的结果.
我想我只是做错了但不知道怎么做.
我的代码:
$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/>';
}
}
Run Code Online (Sandbox Code Playgroud)
结果:(缩短以节省空间)
a: 1
b: 1
a: 1
b: 2
a: 1
b: 3
a: 1
b: 4
a: 1
b: 5
Run Code Online (Sandbox Code Playgroud)
我正在寻找的结果如下:
a: 1
b: 1
a: 2
b: 2
a: 3
b: 3
a: 4
b: 4
a: 5
b: 5
Run Code Online (Sandbox Code Playgroud)
Riz*_*123 25
那么问题当然是你的嵌套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 */);
Run Code Online (Sandbox Code Playgroud)
注意:如果元素数量不均匀,您将不会产生任何错误,它只会打印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>";
}
Run Code Online (Sandbox Code Playgroud)
注意:如果元素数量不均匀,它将只打印两个数组仍具有值的所有值
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>";
}
Run Code Online (Sandbox Code Playgroud)
注意:使用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>";
}
Run Code Online (Sandbox Code Playgroud)
注意:数组必须具有相同数量的元素,否则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]);
Run Code Online (Sandbox Code Playgroud)
注意:由于这种array_map()方法使用的方法,它的行为与元素数量不均匀的行为相同.此外,由于这种方法只适用于PHP> = 5.6你可以删除参数,改变了$numbers用func_get_args()在foreach循环,然后它也适用于PHP> = 5.3
小智 7
使用 1 中的键来获取 2 中的行
foreach($data1 as $k=> $item1)
{
echo $item1 . '<br/>';
echo $data2[$k] . '<br/>';
echo '<br/><br/>';
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10281 次 |
| 最近记录: |