96 votes

PHP combine deux tableaux associatifs en un seul tableau

$array1 = array("$name1" => "$id1");

$array2 = array("$name2" => "$id2", "$name3" => "$id3");

J'ai besoin d'un nouveau tableau combinant tous les éléments, c'est-à-dire que ce serait

$array3 = array("$name1" => "$id1", "$name2" => "$id2", "$name3" => "$id3");

Quelle est la meilleure façon de procéder ?

Désolé, j'ai oublié, les identifiants ne correspondront jamais les uns aux autres, mais techniquement les noms pourraient correspondre, mais ce n'est pas probable, et ils doivent tous être listés dans un tableau. J'ai regardé array_merge mais je n'étais pas sûr que ce soit la meilleure façon de faire. Par ailleurs, comment tester cette méthode à l'unité ?

1voto

JohnPan Points 574

UPDATE Juste une petite note, comme je peux le voir, cela semble vraiment stupide, et cela n'a aucune utilité avec du PHP pur parce que la fonction array_merge travaille juste là. MAIS essayez-le avec le pilote PHP MongoDB avant de vous précipiter sur le downvote. Ce type ajoutera des index pour une raison ou une autre, et ruinera l'objet fusionné. Avec ma petite fonction naïve, la fusion s'effectue exactement comme elle est censée le faire avec une fonction traditionnelle de type array_merge .


Je sais qu'il s'agit d'une vieille question mais j'aimerais ajouter un autre cas que j'ai eu récemment avec les requêtes du pilote MongoDB et aucun des éléments suivants n'a été utilisé array_merge , array_replace ni array_push travaillé. J'avais une structure un peu complexe d'objets enveloppés comme des tableaux dans des tableaux :

$a = [
 ["a" => [1, "a2"]],
 ["b" => ["b1", 2]]
];
$t = [
 ["c" => ["c1", "c2"]],
 ["b" => ["b1", 2]]
];

Et j'avais besoin de les fusionner en gardant la même structure comme ceci :

$merged = [
 ["a" => [1, "a2"]],
 ["b" => ["b1", 2]],
 ["c" => ["c1", "c2"]],
 ["b" => ["b1", 2]]
];

La meilleure solution que j'ai trouvée est la suivante :

public static function glueArrays($arr1, $arr2) {
    // merges TWO (2) arrays without adding indexing. 
    $myArr = $arr1;
    foreach ($arr2 as $arrayItem) {
        $myArr[] = $arrayItem;
    }
    return $myArr;
}

0voto

Kray Points 426

Je suis tombé sur cette question en essayant d'identifier un moyen propre de joindre deux tableaux d'assocs.

J'essayais de joindre deux tables différentes qui n'avaient pas de relations entre elles.

Voici ce que j'ai trouvé pour une requête PDO qui joint deux tables. C'est Samuel Cook qui a identifié une solution pour moi avec la requête array_merge() +1 pour lui.

        $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $sql = "SELECT * FROM ".databaseTbl_Residential_Prospects."";
        $ResidentialData = $pdo->prepare($sql);
        $ResidentialData->execute(array($lapi));
        $ResidentialProspects = $ResidentialData->fetchAll(PDO::FETCH_ASSOC);

        $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $sql = "SELECT * FROM ".databaseTbl_Commercial_Prospects."";
        $CommercialData = $pdo->prepare($sql);
        $CommercialData->execute(array($lapi));
        $CommercialProspects = $CommercialData->fetchAll(PDO::FETCH_ASSOC);

        $Prospects = array_merge($ResidentialProspects,$CommercialProspects);
        echo '<pre>';
        var_dump($Prospects);
        echo '</pre>';

Peut-être que cela aidera quelqu'un d'autre.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X