将Convertir les valeurs d'un tableau multidimensionnel en un tableau unidimensionnel
P粉969666670
P粉969666670 2024-02-03 23:06:59
0
2
397

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

répondre à tous(2)
P粉738248522

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);
P粉151720173

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;
        }
    }
}
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal