¿Cómo insertar un elemento al comienzo de una matriz en PHP?

167

Sé cómo insertarlo hasta el final:

$arr[] = $item;

¿Pero cómo insertarlo al principio?

web
fuente
2
$arr[-1] = $item;Encontrado aquí: stackoverflow.com/a/15252657/669677
44
@ 2astalavista, eso no funciona: print_r($arr)=>Array ( [0] => a, [1] => b, [-1] => c )
laurent
@ returnnthis.lau_ este caso debe usar for loop, comenzando desde -1, para que funcione: for ($i = -1; $i < count($a)-1; $i++)como se muestra en el enlace de referencia, pero es fácil de olvidar, por lo que ya no prefiero esa solución.

Respuestas:

267

Use array_unshift ($ array, $ item);

$arr = array('item2', 'item3', 'item4');
array_unshift($arr , 'item1');
print_r($arr);

Te regalaré

Array
(
 [0] => item1
 [1] => item2
 [2] => item3
 [3] => item4
)
Trav L
fuente
77
¿Qué pasa si necesita claves literales, en lugar de numéricas?
Evan
44
@Evan, la documentación array_unshiftdice lo siguienteAll numerical array keys will be modified to start counting from zero while literal keys won't be touched.
creado el
1
Hay dos problemas: 1) reindexar la matriz 2) no se puede agregar un elemento con un índice.
Nabi KAZ
2
Si tiene una matriz asociativa o necesita preservar claves, vea los ejemplos de usuario aquí: php.net/manual/en/function.array-unshift.php. ¡ Hay algunos buenos ejemplos de cómo lograr esto!
Vallier
112

En el caso de una matriz asociativa o una matriz numerada en la que no desee cambiar las claves de la matriz:

$firstItem = array('foo' => 'bar');

$arr = $firstItem + $arr;

array_merge no funciona, ya que siempre reindexa la matriz.

tihe
fuente
66
Esta es de hecho la mejor respuesta!
Ankit
55
¡Atención! "El operador + devuelve la matriz de la derecha añadida a la matriz de la izquierda; para las claves que existen en ambas matrices, se utilizarán los elementos de la matriz de la izquierda y se utilizarán los elementos coincidentes de la matriz de la derecha. ignorado ". - Ver: stackoverflow.com/a/2140094/3411766
cottton el
La solución es buena porque puede agregar un elemento con un índice y no reindexó la matriz; Pero tenga solo una nota sobre la eliminación del elemento en la matriz de la derecha, si hay el mismo índice en la matriz de la izquierda.
Nabi KAZ
6

Inserte un elemento al comienzo de una matriz asociativa con una cadena / clave de índice personalizada

<?php

$array = ['keyOne'=>'valueOne', 'keyTwo'=>'valueTwo'];

$array = array_reverse($array);

$array['newKey'] = 'newValue';

$array = array_reverse($array);

RESULTADO

[
  'newKey' => 'newValue',
  'keyOne' => 'valueOne',
  'keyTwo' => 'valueTwo'
]
Manish Dhruw
fuente
4

Use array_unshift () para insertar el primer elemento en una matriz.

El usuario array_shift () elimina el primer elemento de una matriz.

Vinit Kadkol
fuente
4

O puede usar una matriz temporal y luego eliminar la real si desea cambiarla durante el ciclo:

$array = array(0 => 'a', 1 => 'b', 2 => 'c');
$temp_array = $array[1];

unset($array[1]);
array_unshift($array , $temp_array);

la salida será:

array(0 => 'b', 1 => 'a', 2 => 'c')

y cuando lo esté haciendo durante el ciclo, debe limpiar $temp_arraydespués de agregar el elemento a la matriz.

Arnas Pečelis
fuente
1

Con índice personalizado:

$arr=array("a"=>"one", "b"=>"two");
    $arr=array("c"=>"three", "d"=>"four").$arr;

    print_r($arr);
    -------------------
    output:
    ----------------
    Array
    (
    [c]=["three"]
    [d]=["four"]
    [a]=["two"]
    [b]=["one"]
    )
Timothy Nwanwene
fuente
1
una matriz no se puede concatenar así
Battle Hawk
Probablemente quiso usar más (+) en lugar de coma (.)
Erdinç Çorbacı
1

Para una matriz asociativa, puede usar merge.

$arr = array('item2', 'item3', 'item4');
$arr = array_merge(array('item1'), $arr)
pictoru
fuente