47 votes

PHP array_merge avec des clés numériques

Comment faire en sorte que array_merge() écrase deux clés avec des valeurs différentes mais le même index de clé à partir de deux tableaux ?

par exemple, fusionner :

[0] => 'whatever'

avec

[0] => 'whatever', [1] => 'a', [2] => 'b'

devrait produire

[0] => 'whatever', [1] => 'a', [2] => 'b'

Fondamentalement, je veux que array_merge se comporte de la même manière que si les tableaux ont des clés de chaîne ...

92voto

AJ. Points 12912

Utilisez l'opérateur +

Comparez array_merge à + opérateur:

 <?php

$a1 = array(0=>"whatever",);
$a2 = array(0=>"whatever",1=>"a",2=>"b");

print_r(array_merge($a1,$a2));
print_r($a1+$a2);
?>

Sortir:

 Array
(
    [0] => whatever
    [1] => whatever
    [2] => a
    [3] => b
)
Array
(
    [0] => whatever
    [1] => a
    [2] => b
)

L'opérateur + fonctionne toujours si votre tableau associatif a les touches numériques dans le désordre :

 <?php

$a1 = array(0=>"whatever",);
$a2 = array(1=>"a",0=>"whatever",2=>"b");

print_r(array_merge($a1,$a2));
print_r($a1+$a2);
?>

Sortir:

 Array
(
    [0] => whatever
    [1] => a
    [2] => whatever
    [3] => b
)
Array
(
    [0] => whatever
    [1] => a
    [2] => b
)

Remarquez que array_merge dans ce cas crée une nouvelle clé. Pas souhaitable...

25voto

HKandulla Points 481

array_replace fait exactement cela !

3voto

manvel Points 39

Dans mon projet, j'utilise ma propre fonction

 function array_merge_custom(){
    $array = [];
    $arguments  = func_num_args();
    foreach($arguments as $args)
        foreach($args as $key => $value)
            $array[$key] = $value;
    return $array;
}

Usage

 $a = array_merge_custom($b, $c, $d, ... .. )

2voto

Göktuğ Öztürk Points 187

Vous devez utiliser $a2+$a1 pour obtenir le même résultat avec array_merge($a1,$a2);

 $a1 = array(
    'k1' => 1,
    'k2' => 2,
    'k3' => 3,
);

$a2 = array(
    'k1' => 11,
    'k2' => 22,
    'k4' => 44,
);

Code:

 print_r(array_merge($a1,$a2));

Sortir:

 Array ( 
    [k1] => 11 
    [k2] => 22 
    [k3] => 3 
    [k4] => 44 
)

Code:

 print_r($a1+$a2);

Sortir:

 Array ( 
    [k1] => 1 
    [k2] => 2 
    [k3] => 3 
    [k4] => 44 
)

Code:

 print_r($a2+$a1);

Sortir:

 Array ( 
    [k1] => 11 
    [k2] => 22 
    [k4] => 44 
    [k3] => 3 
) 

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