PHP anteponer matriz asociativa con claves literales?


¿Es posible anteponer un array asociativo con pares literales key=>value? 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');
Author: Colin Brock, 2009-09-03

4 answers

¿No puedes simplemente hacer:

$resulting_array = $array2 + $array1;

?

 186
Author: cletus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-09-03 01:29:35

La respuesta es no. No puede anteponer un array asociativo con un par clave-valor.

Sin embargo, puede crear una nueva matriz que contenga el nuevo par clave-valor al principio 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 complejidad O(n).

La sintaxis está abajo.

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

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

 19
Author: PHPguru,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-03-23 18:59:34

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

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

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

array_merge(array($key => $value), $myarray);
 14
Author: mvpetrovich,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-08-25 17:52:00

@Cletus es perfecto. Solo para agregar, si el orden de los elementos en los arrays de entrada son ambiguos, y necesita ordenar el array final, es posible que desee ksort :

$resulting_array = $array1 + $array2;
ksort($resulting_array);
 5
Author: karim79,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-05-12 04:56:48