如果在另一個平面關聯數組中找到對應的鍵,我想更改一個多維數組中的值。
我有這兩個陣列:
$full = [ 'Cars' => [ 'Volvo' => 0, 'Mercedes' => 0, 'BMW' => 0, 'Audi' => 0 ], 'Motorcycle' => [ 'Ducati' => 0, 'Honda' => 0, 'Suzuki' => 0, 'KTM' => 0 ] ]; $semi = [ 'Volvo' => 1, 'Audi' => 1 ];
我希望陣列看起來像這樣:
Array ( [Cars] => Array ( [Volvo] => 1 [Mercedes] => 0 [BMW] => 0 [Audi] => 1 ) [Motorcycle] => Array ( [Ducati] => 0 [Honda] => 0 [Suzuki] => 0 [KTM] => 0 ) )
我從輸入欄位中取得 $semi 數組,並希望將其合併到 $full 中以將其儲存到我的資料庫中。
我已經嘗試過 array_replace()
像:
$replaced = array_replace($full, $semi);
P粉7382485222024-02-04 20:07:00
你只需要存取“leafnodes”,使用array_walk_recursive()
就可以非常直接地迭代和修改整個陣列。
現代「箭頭函數」語法允許存取半數組,而無需編寫 use()
。
這種方法絕對不會進行迭代函數呼叫。它透過引用(&$v
) 修改$v
,使用「加法賦值」組合運算子( =
) 以及空合併operator (? ?
) 有條件地增加半數組中找到的全數組中的值。
程式碼:(示範)
#array_walk_recursive( $full, fn(&$v, $k) => $v += $semi[$k] ?? 0 ); var_export($full);
不使用array_walk_recursive()
將需要使用巢狀循環來增加合格的製造商。
程式碼:(示範)
#foreach ($full as &$manufacturers) { foreach ($manufacturers as $m => &$count) { $count += $semi[$m] ?? 0; } } var_export($full);
P粉1517201732024-02-04 12:18:10
您應該循環 $semi
數組並檢查它是否存在於 $full
數組之一中,然後添加到其中:
foreach ($semi as $semiItem => $semiValue) { foreach ($full as &$fullItems) { if (isset($fullItems[$semiItem])) { $fullItems[$semiItem] = $semiValue; } } }