Untuk menggelung secara serentak melalui dua tatasusunan, kod yang disediakan dalam soalan menggunakan gelung foreach bersarang. Walau bagaimanapun, pendekatan ini tidak cekap kerana ia menghasilkan keputusan yang salah.
Berikut adalah penyelesaian yang berkesan untuk mengatasi cabaran ini:
Kaedah ini membenarkan gelung serentak melalui berbilang tatasusunan.
array_map(function($v1, $v2){ echo $v1 . "<br>"; echo $v2 . "<br><br>"; }, $data1, $data2);
Buat MultipleIterator dan lampirkan ArrayIterators untuk tatasusunan yang dikehendaki.
$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><br>"; }
Gunakan gelung for dengan pembilang untuk mengakses elemen yang sepadan daripada kedua-dua tatasusunan.
$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>"; }
Jika tatasusunan mempunyai nilai unik, gunakan array_combine() untuk mencipta tatasusunan tunggal dengan elemen daripada tatasusunan pertama sebagai kunci dan yang daripada tatasusunan kedua sebagai nilai .
foreach(array_combine($data1, $data2) as $d1 => $d2) { echo $d1 . "<br>"; echo $d2 . "<br><br>"; }
Untuk menggelungkan nombor tatasusunan yang tidak diketahui, gabungkan array_map() dengan 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]);
Atas ialah kandungan terperinci Bagaimana untuk Cekap Berulang Melalui Dua Tatasusunan Secara serentak dalam PHP?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!