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é ?

141voto

Samuel Cook Points 8358

array_merge() est plus efficace, mais il existe plusieurs options :

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

$array2 = array("id2" => "value2", "id3" => "value3", "id4" => "value4");

$array3 = array_merge($array1, $array2/*, $arrayN, $arrayN*/);
$array4 = $array1 + $array2;

echo '<pre>';
var_dump($array3);
var_dump($array4);
echo '</pre>';

// Results:
    array(4) {
      ["id1"]=>
      string(6) "value1"
      ["id2"]=>
      string(6) "value2"
      ["id3"]=>
      string(6) "value3"
      ["id4"]=>
      string(6) "value4"
    }
    array(4) {
      ["id1"]=>
      string(6) "value1"
      ["id2"]=>
      string(6) "value2"
      ["id3"]=>
      string(6) "value3"
      ["id4"]=>
      string(6) "value4"
    }

23voto

Brad Points 61171

Vérifiez array_merge() .

$array3 = array_merge($array1, $array2);

16voto

wranvaud Points 931

Il y a également array_replace où un tableau d'origine est modifié par d'autres tableaux en conservant l'identité de l'utilisateur. clé => valeur sans créer de clés en double.

  • Les mêmes clés sur d'autres tableaux entraîneront l'écrasement des valeurs du tableau original.
  • Les nouvelles clés des autres tableaux seront créées sur le tableau d'origine.

3voto

xgretsch Points 452

J'utilise une enveloppe autour de array_merge pour gérer le commentaire de SeanWM sur les tableaux nuls ; je veux aussi parfois me débarrasser des doublons. En général, je veux aussi fusionner un tableau dans un autre, plutôt que de créer un nouveau tableau. Cela se termine comme suit :

/**
 * Merge two arrays - but if one is blank or not an array, return the other.
 * @param $a array First array, into which the second array will be merged
 * @param $b array Second array, with the data to be merged
 * @param $unique boolean If true, remove duplicate values before returning
 */
function arrayMerge(&$a, $b, $unique = false) {
    if (empty($b)) {
        return;  // No changes to be made to $a
    }
    if (empty($a)) {
        $a = $b;
        return;
    }
    $a = array_merge($a, $b);
    if ($unique) {
        $a = array_unique($a);
    }
}

2voto

tom10271 Points 1127
        $array = array(
            22 => true,
            25 => true,
            34 => true,
            35 => true,
        );

        print_r(
            array_replace($array, [
                22 => true,
                42 => true,
            ])
        );

        print_r(
            array_merge($array, [
                22 => true,
                42 => true,
            ])
        );

S'il s'agit d'un tableau numérique mais pas d'un tableau associatif séquentiel, il faut utiliser array_replace

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