2012-08-10 4 views
1

Regardez ce code:array_merge comportement étrange

$a = array('1'=>'1'); 
$b = array(''=>''); 

var_dump(array_merge($a,$b)); 

la sortie me semble vraiment étrange:

array(2) { 
    [0] => 
    string(1) "1" 
    '' => 
    string(0) "" 
} 

Ok, j'ai changé $a dans ceci: $a = array('k'=>'v'); et la sortie est devenue plus prévisible :

array(2) { 
    'k' => 
    string(1) "v" 
    '' => 
    string(0) "" 
} 

La question est: pourquoi diable la clé du premier élément est 0 dans le premier exemple?

modifier:

var_dump($a); 
array(1) { 
    [1] => 
    string(1) "1" 
} 
+0

Les clés numériques seront renumérotées! – Pus

+0

* Indice: * Que donne 'var_dump ($ a)'? – hakre

+0

@hakre, inséré dans la question. Oui, je sais que le premier '1' est traité comme un nombre ... – k102

Répondre

6

Les valeurs du tableau d'entrée avec les touches numériques sont renumérotés avec les touches incrémenter à partir de zéro dans le tableau de résultats.

http://php.net/array_merge

Oui, il est une idiosyncrasie de PHP pour traiter les valeurs de chaîne numériques sous forme de valeurs numériques dans ce cas. Vous souhaiterez peut-être utiliser $a + $b à la place.

+0

merci! en fait, j'utilise déjà '+', je voulais juste obtenir une explication – k102