colin brock
¿Es posible anteponer una matriz asociativa con pares literales de 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');
¿No puedes simplemente hacer:
$resulting_array = $array2 + $array1;
?
-
Ver también array_merge() y su diferencia con el uso del operador +: br.php.net/manual/en/function.array-merge.php#92602
– Havenard
3 de septiembre de 2009 a las 1:33
-
@cletus: Vaya. Sí puedo. No estoy seguro de qué me hizo pensar que no podía o qué no funcionaba antes. Gracias por la respuesta.
– ColinBrock
3 de septiembre de 2009 a las 1:36
-
Vale la pena notar 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
3 de septiembre de 2009 a las 1:37
PHPgurú
No puede anteponer directamente 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á abajo.
$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 preservar las teclas numéricas: probablemente deseado
– Brad Kent
28 de mayo de 2019 a las 2:35
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(), utilice de nuevo array_merge():
array_merge(array($key => $value), $myarray);
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:
A partir de PHP 5.4 también puede usar la sintaxis de matriz corta, que reemplaza matriz() con [].
karim79
@Cletus es perfecto. Solo para agregar, si el orden de los elementos en las matrices de entrada es ambiguo, y necesita ordenar la matriz final, es posible que desee sortear:
$resulting_array = $array1 + $array2;
ksort($resulting_array);
-
Como nota tardía,
ksort
devuelve booleano, por lo que lo anterior debe hacerse como dos declaraciones, no como una, por ejemplo$a = $array1 + $array2; ksort($a);
de lo contrario$resulting_array
será un valor booleano, no la matriz que esperaba.– El Yobo
17/10/2011 a las 22:39
toby allen
Si usa Laravel, puede usar anteponer en una instancia de colección
collect(['b' => 'b', 'c' => 'c'])->prepend('a','a');
// ['a'=>'a', 'b' => 'b', 'c' => 'c']
-
Como nota tardía,
ksort
devuelve booleano, por lo que lo anterior debe hacerse como dos declaraciones, no como una, por ejemplo$a = $array1 + $array2; ksort($a);
de lo contrario$resulting_array
será un valor booleano, no la matriz que esperaba.– El Yobo
17/10/2011 a las 22:39
Ver también: Diferencias entre array_replace() y array_merge() y + (operador de unión de matriz)
– mickmackusa
10 de noviembre a las 22:48