Rumah > Soal Jawab > teks badan
Saya ingin menukar nilai dalam satu tatasusunan berbilang dimensi jika kunci yang sepadan ditemui dalam tatasusunan bersekutu rata yang lain.
Saya mempunyai dua tatasusunan ini:
$full = [ 'Cars' => [ 'Volvo' => 0, 'Mercedes' => 0, 'BMW' => 0, 'Audi' => 0 ], 'Motorcycle' => [ 'Ducati' => 0, 'Honda' => 0, 'Suzuki' => 0, 'KTM' => 0 ] ]; $semi = [ 'Volvo' => 1, 'Audi' => 1 ];
Saya mahu tatasusunan kelihatan seperti ini:
Array ( [Cars] => Array ( [Volvo] => 1 [Mercedes] => 0 [BMW] => 0 [Audi] => 1 ) [Motorcycle] => Array ( [Ducati] => 0 [Honda] => 0 [Suzuki] => 0 [KTM] => 0 ) )
Saya mendapat tatasusunan $semi daripada medan input dan ingin menggabungkannya menjadi $full untuk menyimpannya ke pangkalan data saya.
Saya telah mencuba array_replace()
seperti:
$replaced = array_replace($full, $semi);
P粉7382485222024-02-04 20:07:00
Anda hanya perlu mengakses "leafnodes" dan sangat mudah untuk mengulang dan mengubah suai keseluruhan tatasusunan menggunakan array_walk_recursive()
.
Sintaks "fungsi anak panah" moden membenarkan akses kepada separuh tatasusunan tanpa menulis use()
.
Kaedah ini tidak akan membuat panggilan fungsi berulang. Ia secara bersyarat menambah nilai yang terdapat dalam tatasusunan separuh dengan rujukan (&$v
) 修改 $v
,使用“加法赋值”组合运算符 (+=
) 以及空合并operator (??
) dalam tatasusunan penuh.
Kod: (Demo)
array_walk_recursive( $full, fn(&$v, $k) => $v += $semi[$k] ?? 0 ); var_export($full);
Tidak menggunakan array_walk_recursive()
memerlukan penggunaan gelung bersarang untuk menambah pengeluar yang layak.
Kod: (Demo)
foreach ($full as &$manufacturers) { foreach ($manufacturers as $m => &$count) { $count += $semi[$m] ?? 0; } } var_export($full);
P粉1517201732024-02-04 12:18:10
Anda harus menggelung $semi
数组并检查它是否存在于 $full
melalui salah satu tatasusunan dan menambahnya:
foreach ($semi as $semiItem => $semiValue) { foreach ($full as &$fullItems) { if (isset($fullItems[$semiItem])) { $fullItems[$semiItem] = $semiValue; } } }