将Konvertieren Sie mehrdimensionale Array-Werte in ein eindimensionales Array
P粉969666670
P粉969666670 2024-02-03 23:06:59
0
2
396

Ich möchte einen Wert in einem mehrdimensionalen Array ändern, wenn der entsprechende Schlüssel in einem anderen flachen assoziativen Array gefunden wird.

Ich habe diese beiden Arrays:

$full = [
    'Cars' => [
         'Volvo' => 0,
         'Mercedes' => 0,
         'BMW' => 0,
         'Audi' => 0
    ],
    'Motorcycle' => [
        'Ducati' => 0,
        'Honda' => 0,
        'Suzuki' => 0,
        'KTM' => 0
    ]
];

$semi = [
    'Volvo' => 1,
    'Audi' => 1
];

Ich möchte, dass das Array so aussieht:

Array
(
    [Cars] => Array
        (
            [Volvo] => 1
            [Mercedes] => 0
            [BMW] => 0
            [Audi] => 1
        )

    [Motorcycle] => Array
        (
            [Ducati] => 0
            [Honda] => 0
            [Suzuki] => 0
            [KTM] => 0
        )
)

Ich erhalte das $semi-Array aus dem Eingabefeld und möchte es in $full zusammenführen, um es in meiner Datenbank zu speichern.

Ich habe versucht array_replace() wie:

$replaced = array_replace($full, $semi);

P粉969666670
P粉969666670

Antworte allen(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;
        }
    }
}
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage