2 回答

TA貢獻1780條經驗 獲得超4個贊
使用1中的鍵獲取2中的行
foreach($data1 as $k=> $item1){ echo $item1 . '<br/>'; echo $data2[$k] . '<br/>'; echo '<br/><br/>';}

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你可以刪除參數,改變了$numbers
用func_get_args()
在foreach循環,然后它也適用于PHP> = 5.3
- 2 回答
- 0 關注
- 1374 瀏覽
添加回答
舉報