Como inserir um item no início de uma matriz em PHP?

167

Eu sei como inseri-lo até o fim:

$arr[] = $item;

Mas como inseri-lo no começo?

rede
fonte
2
$arr[-1] = $item;Encontrado aqui: stackoverflow.com/a/15252657/669677
4
@ 2astalavista, isso não funciona: print_r($arr)=>Array ( [0] => a, [1] => b, [-1] => c )
laurent
@ returnthis.lau_ Neste caso, você deve usar o loop - a partir de -1 - para fazê-lo funcionar: for ($i = -1; $i < count($a)-1; $i++)como o link referenciado mostrou, mas é fácil esquecer, por isso não prefiro mais essa solução.

Respostas:

267

Use array_unshift ($ array, $ item);

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

Darei à você

Array
(
 [0] => item1
 [1] => item2
 [2] => item3
 [3] => item4
)
Trav L
fonte
7
E se você precisar de chaves literais, e não numéricas?
Evan
4
@Evan, a documentação para array_unshiftdiz o seguinteAll numerical array keys will be modified to start counting from zero while literal keys won't be touched.
craned
1
Existem dois problemas: 1) reindexar a matriz 2) não pode adicionar itens com um índice.
Nabi KAZ
2
Se você possui uma matriz associativa ou precisa preservar chaves, consulte os exemplos de usuário aqui: php.net/manual/en/function.array-unshift.php, existem alguns bons exemplos de como fazer isso!
Vallier
112

No caso de uma matriz associativa ou matriz numerada em que você não deseja alterar as chaves da matriz:

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

$arr = $firstItem + $arr;

array_merge não funciona, pois sempre reindexa a matriz.

tihe
fonte
6
Esta é realmente a melhor resposta!
Ankit
5
Atenção! "O operador + retorna a matriz da direita anexada à matriz da esquerda; para chaves existentes em ambas as matrizes, os elementos da matriz da esquerda serão usados ​​e os elementos correspondentes da matriz da direita serão ignorado ". - Veja: stackoverflow.com/a/2140094/3411766
cottton
A solução é boa porque pode adicionar item com um índice e não reindexar a matriz; Mas tenha apenas uma observação sobre remover o item na matriz à direita, se houver o mesmo índice na matriz à esquerda.
Nabi KAZ
6

Inserir um item no início de uma matriz associativa com string / chave 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
fonte
4

Use array_unshift () para inserir o primeiro elemento em uma matriz.

O usuário array_shift () para remover o primeiro elemento de uma matriz.

Vinit Kadkol
fonte
4

Ou você pode usar uma matriz temporária e excluir a real se quiser alterá-la durante o ciclo:

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

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

a saída será:

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

e quando estiver fazendo isso enquanto estiver em ciclo, limpe $temp_arrayapós anexar o item à matriz.

Arnas Pečelis
fonte
1

Com í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
fonte
1
um array não pode ser concatenados como esta
Batalha Falcão
Provavelmente ele pretendia usar mais (+) em vez de vírgula (.)
Erdinç Çorbacı
1

Para uma matriz associativa, você pode apenas usar mesclagem.

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