Apabila menggelung melalui berbilang tatasusunan serentak, perkara biasa Masalahnya ialah keputusan mungkin tidak betul kerana struktur gelung yang tidak sesuai. Pertimbangkan contoh berikut:
$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/>'; } }
Kod di atas menggunakan gelung foreach bersarang, yang menghasilkan output berikut:
a: 1 b: 1 a: 1 b: 2 a: 1 b: 3 a: 1 b: 4 a: 1 b: 5
Walau bagaimanapun, output yang dijangkakan ialah:
a: 1 b: 1 a: 2 b: 2 a: 3 b: 3 a: 4 b: 4 a: 5 b: 5
Masalahnya ialah struktur gelung bersarang menyebabkan setiap elemen $data1 digelung dengan setiap elemen $data2. Untuk mencapai output yang diingini, kita perlu menggelung melalui kedua-dua tatasusunan secara serentak.
Untuk menggelung melalui berbilang tatasusunan serentak, anda boleh menggunakan pelbagai kaedah:
array_map() (PHP >=5.3):
Kaedah ini membolehkan anda menghantar berbilang tatasusunan dan fungsi panggil balik untuk memproses elemennya.
array_map(function($v1, $v2){ echo $v1 . '<br>'; echo $v2 . '<br>'; }, $data1, $data2);
Kaedah MultipleIterator (PHP >=5.3):
Kaedah ini mencipta berbilang lelaran objek yang boleh digunakan untuk mengulangi berbilang tatasusunan serentak.
$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>'; }
untuk Gelung dengan Pembilang (PHP >=4.3):
Kaedah ini menggunakan gelung for dengan pemboleh ubah pembilang untuk lelaran melalui kedua-duanya 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>'; }
array_combine() Kaedah (PHP >=5.0):
Kaedah ini boleh digunakan jika tatasusunan mempunyai nilai unik. Ia menggabungkan tatasusunan ke dalam tatasusunan tunggal di mana elemen $data1 adalah kunci dan elemen $data2 ialah nilai.
foreach (array_combine($data1, $data2) as $d1 => $d2) { echo $d1 . '<br>'; echo $d2 . '<br>'; }
call_user_func_array() Kaedah ( PHP >=5.6):
Kaedah ini membolehkan anda menghantar berbilang tatasusunan ke fungsi panggil balik.
$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 Menggelung Melalui Berbilang Tatasusunan Secara serentak dalam PHP?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!