同時循環多個數組時,常見的問題問題是由於不適當的循環結構,結果可能不正確。考慮以下範例:
$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/>'; } }
上面的程式碼使用巢狀的foreach 循環,這會產生以下輸出:
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
問題是巢狀循環結構導致$data1 的每個元素都與$data2 的每個元素一起循環。為了達到想要的輸出,我們需要同時循環兩個陣列。
要同時循環多個數組,可以使用各種方法:
array_map() 方法 (PHP >=5.3):
此方法允許您傳遞多個陣列和一個回調函數來處理它們的元素。
array_map(function($v1, $v2){ echo $v1 . '<br>'; echo $v2 . '<br>'; }, $data1, $data2);
MultipleIterator 方法(PHP >=5.3):
此方法建立可用於同時迭代多個陣列的多個迭代器對象。
$it = new MultipleIterator(); $it->attachIterator(new ArrayIterator($data1)); $it->attachIterator(new ArrayIterator($data2)); foreach ($it as $a) { echo $a[0] . '<br>'; echo $a[1] . '<br>'; }
for Loop with Counter (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>'; }
array_combine() 方法 (PHP >=5.0):
如果數組有,可以使用此方法獨特的價值觀。它將數組組合成一個數組,其中 $data1 的元素是鍵,$data2 的元素是值。
foreach (array_combine($data1, $data2) as $d1 => $d2) { echo $d1 . '<br>'; echo $d2 . '<br>'; }
call_user_func_array() 方法( PHP >=5.6):
此方法允許您將多個數組傳遞給。
$func = function (...$numbers) { foreach ($numbers as $v) echo $v . '<br>'; echo '<br>'; }; call_user_func_array("array_map", [$func, $data1, $data2]);
以上是如何在 PHP 中同時有效率地循環多個數組?的詳細內容。更多資訊請關注PHP中文網其他相關文章!