將多維數組值轉換為一維數組
P粉969666670
P粉969666670 2024-02-03 23:06:59
0
2
337

如果在另一個平面關聯數組中找到對應的鍵,我想更改一個多維數組中的值。

我有這兩個陣列:

$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粉969666670
P粉969666670

全部回覆(2)
P粉738248522

你只需要存取“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粉151720173

您應該循環 $semi 數組並檢查它是否存在於 $full 數組之一中,然後添加到其中:

foreach ($semi as $semiItem => $semiValue) {
    foreach ($full as &$fullItems) {
        if (isset($fullItems[$semiItem])) {
            $fullItems[$semiItem] = $semiValue;
        }
    }
}
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!