PHP anteponer matriz asociativa con claves literales?


112

¿Es posible anteponer una matriz asociativa con pares literal clave => valor? Sé que array_unshift () funciona con claves numéricas, pero espero algo que funcione 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');

Respuestas:


219

¿No puedes simplemente hacer:

$resulting_array = $array2 + $array1;

?


15
Consulte también array_merge () y su diferencia con el operador +: br.php.net/manual/en/function.array-merge.php#92602
Havenard

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

Vale la pena señalar la diferencia, pero esa diferencia es relevante para preservar las claves numéricas y esta matriz es una matriz asociativa "pura" con claves de cadena.
cletus

29

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 clave-valor al comienzo de la matriz con el operador de unión +. Sin embargo, el resultado es una matriz completamente nueva y la creación de la nueva matriz tiene una complejidad O (n).

La sintaxis está a continuación.

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

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


"sobrescribe las claves y no conserva las claves numéricas" ... a) ¿cómo maneja el operador de unión ("+") las claves "duplicadas"? re: no conservar las teclas numéricas: probablemente deseado
Brad Kent

16

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

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

Para anteponer un solo valor, para una matriz asociativa, en lugar de array_unshift (), use de nuevo array_merge ():

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

5

@Cletus da en el clavo. Solo para agregar, si el orden de los elementos en las matrices de entrada es ambiguo y necesita que se ordene la matriz final, es posible que desee ksort :

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

4
Como nota tardía, ksortdevuelve un valor booleano, por lo que lo anterior debe hacerse como dos declaraciones y no una, por ejemplo $a = $array1 + $array2; ksort($a);, de lo contrario $resulting_array, será un valor booleano y no la matriz que esperaba.
El Yobo

3

Usando el mismo método que @mvpetrovich, puede usar la versión abreviada de una matriz para acortar la sintaxis.

$_array = array_merge(["key1" => "key_value"], $_old_array);

Referencias:

PHP: fusión_array ()

PHP: Matrices - Manual

A partir de PHP 5.4 también puede usar la sintaxis de matriz corta, que reemplaza matriz () con [].

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.