suchen

Heim  >  Fragen und Antworten  >  Hauptteil

将Konvertieren Sie mehrdimensionale Array-Werte in ein eindimensionales Array

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粉969666670P粉969666670340 Tage vor429

Antworte allen(2)Ich werde antworten

  • P粉738248522

    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);

    Antwort
    0
  • P粉151720173

    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;
            }
        }
    }
    

    Antwort
    0
  • StornierenAntwort