Maison  >  Questions et réponses  >  le corps du texte

将Convertir les valeurs d'un tableau multidimensionnel en un tableau unidimensionnel

Je souhaite modifier une valeur dans un tableau multidimensionnel si la clé correspondante se trouve dans un autre tableau associatif plat.

J'ai ces deux tableaux :

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

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

Je veux que le tableau ressemble à ceci :

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

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

Je récupère le tableau $semi du champ de saisie et je souhaite le fusionner dans $full pour l'enregistrer dans ma base de données.

J'ai essayé array_replace() comme :

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

P粉969666670P粉969666670233 Il y a quelques jours335

répondre à tous(2)je répondrai

  • P粉738248522

    P粉7382485222024-02-04 20:07:00

    Il vous suffit d'accéder aux "leafnodes" et il est très simple de parcourir et de modifier l'ensemble du tableau en utilisant array_walk_recursive().

    La syntaxe moderne de la "fonction fléchée" permet d'accéder aux demi-tableaux sans écrire use().

    Cette méthode n'effectuera jamais d'appels de fonction itératifs. Il incrémente conditionnellement la valeur trouvée dans le demi-tableau par référence (&$v) 修改 $v,使用“加法赋值”组合运算符 (+=) 以及空合并operator (??) dans le tableau complet.

    Code : (Démo)

    array_walk_recursive(
        $full,
        fn(&$v, $k) => $v += $semi[$k] ?? 0
    );
    
    var_export($full);

    Ne pas utiliser array_walk_recursive() nécessitera l'utilisation de boucles imbriquées pour ajouter des fabricants qualifiés.

    Code : (Démo)

    foreach ($full as &$manufacturers) {
        foreach ($manufacturers as $m => &$count) {
            $count += $semi[$m] ?? 0;
        }
    }
    var_export($full);

    répondre
    0
  • P粉151720173

    P粉1517201732024-02-04 12:18:10

    Vous devez parcourir $semi 数组并检查它是否存在于 $full l'un des tableaux et y ajouter :

    foreach ($semi as $semiItem => $semiValue) {
        foreach ($full as &$fullItems) {
            if (isset($fullItems[$semiItem])) {
                $fullItems[$semiItem] = $semiValue;
            }
        }
    }
    

    répondre
    0
  • Annulerrépondre