2009-09-03 14 views
89

¿Es posible anteponer una matriz asociativa con clave literal => pares de valores? Sé que array_unshift() funciona con teclas numéricas, pero estoy esperando algo que funcione con claves literales.PHP asociar matriz asociativa con claves literales?

Como ejemplo me gustaría hacer lo siguiente:

$array1 = array('fruit3'=>'apple', 'fruit4'=>'orange'); 
$array2 = array('fruit1'=>'cherry', 'fruit2'=>'blueberry'); 

// prepend magic 

$resulting_array = ('fruit1'=>'cherry', 
        'fruit2'=>'blueberry', 
        'fruit3'=>'apple', 
        'fruit4'=>'orange'); 

Respuesta

172

¿No puedes hacer:

$resulting_array = $array2 + $array1; 

?

+13

Véase también array_merge() y su diferencia de usar el operador +: http://br.php.net/manual/en/function.array-merge.php#92602 – Havenard

+2

@cletus: Sheesh. Sí puedo. No estoy seguro de qué me hizo pensar que no podía o no funcionaba antes. Gracias por la respuesta. –

+1

@Havenard: gracias por la información adicional. –

4

@Cletus es perfecto. Sólo para añadir, si el orden de los elementos en las matrices de entrada son ambiguas, y que necesita la matriz final a ser ordenada, es posible que desee ksort:

$resulting_array = $array1 + $array2; 
ksort($resulting_array); 
+0

@karim: Eso es útil, gracias. –

+4

Como nota tardía, 'ksort' devuelve booleano, por lo que lo anterior debe hacerse como dos instrucciones, no una, p. '$ a = $ array1 + $ array2; ksort ($ a); ', de lo contrario' $ result_array' será un valor booleano, no la matriz que estaba esperando. –

13

En su situación, que desea utilizar array_merge ():

array_merge(array('fruit1'=>'cherry', 'fruit2'=>'blueberry'), array('fruit3'=>'apple', 'fruit4'=>'orange')); 

anteponer un solo valor, por una matriz asociativa, en lugar de array_unshift(), de nuevo utilizar array_merge():

array_merge(array($key => $value), $myarray); 
18

La respuesta es no. No puede anteponer una matriz asociativa con un par clave-valor.

Sin embargo, puede crear una nueva matriz que contenga el nuevo par de clave-valor al comienzo de la matriz con el operador de unión +. El resultado es una matriz completamente nueva y la creación de la nueva matriz tiene O (n) complejidad.

La sintaxis está por debajo.

$new_array = array('new_key' => 'value') + $original_array; 

Nota: No utilice array_merge(). array_merge() sobrescribe las claves y no conserva las teclas numéricas.

Cuestiones relacionadas