Как вставить элемент в начале массива в PHP?

167

Я знаю, как вставить его в конец:

$arr[] = $item;

Но как вставить это в начало?

Web
источник
2
$arr[-1] = $item;Найдено здесь: stackoverflow.com/a/15252657/669677
4
@ 2astalavista, это не работает: print_r($arr)=>Array ( [0] => a, [1] => b, [-1] => c )
Laurent
@ returnthis.lau_ этот случай вы должны использовать для цикла - начиная с -1 - чтобы он работал: for ($i = -1; $i < count($a)-1; $i++)как показала ссылочная ссылка, но это легко забыть, поэтому я больше не предпочитаю это решение.

Ответы:

267

Использовать array_unshift ($ array, $ item);

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

дам тебе

Array
(
 [0] => item1
 [1] => item2
 [2] => item3
 [3] => item4
)
Трав Л
источник
7
А что если вам нужны буквенные, а не числовые ключи?
Эван
4
@Evan, документация для array_unshiftговорит следующееAll numerical array keys will be modified to start counting from zero while literal keys won't be touched.
вытянутый
1
Есть две проблемы: 1) переиндексация массива 2) невозможно добавить элемент с индексом.
Наби КАЗ
2
Если у вас есть ассоциативный массив или вам необходимо сохранить ключи, посмотрите примеры пользователей здесь: php.net/manual/en/function.array-unshift.php есть пара хороших примеров того, как этого добиться!
Вальер
112

В случае ассоциативного массива или пронумерованного массива, где вы не хотите изменять ключи массива:

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

$arr = $firstItem + $arr;

array_merge не работает, так как всегда переиндексирует массив.

TIHE
источник
6
Это действительно лучший ответ!
Анкит
5
Внимание! «Оператор + возвращает правый массив, добавленный к левому массиву; для ключей, которые существуют в обоих массивах, будут использоваться элементы из левого массива, а соответствующие элементы из правого массива будут проигнорировано «. - См .: stackoverflow.com/a/2140094/3411766
Котттон
Решение это хорошо, потому что можно добавить элемент с индексом, а не переиндексировать массив; Но обратите внимание на удаление элемента в правом массиве, если в левом массиве есть такой же индекс.
Наби КАЗ
6

Вставить элемент в начало ассоциативного массива со строкой / пользовательским индексным ключом

<?php

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

$array = array_reverse($array);

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

$array = array_reverse($array);

РЕЗУЛЬТАТ

[
  'newKey' => 'newValue',
  'keyOne' => 'valueOne',
  'keyTwo' => 'valueTwo'
]
Маниш Друу
источник
4

Это поможет

http://www.w3schools.com/php/func_array_unshift.asp

array_unshift();
Дарт Вейдер
источник
2
^ OBE: «W3Schools в значительной степени решил эти проблемы и решил большинство проблем нижеподписавшихся разработчиков». ~ W3Fools.com
Эндрю Козак
4

Используйте array_unshift (), чтобы вставить первый элемент в массив.

Пользователь array_shift () удаляет первый элемент массива.

Винит Кадкол
источник
4

Или вы можете использовать временный массив, а затем удалить реальный, если хотите изменить его в цикле:

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

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

вывод будет:

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

и когда вы делаете это во время цикла, вы должны очистить $temp_arrayпосле добавления элемента в массив.

Арнас Печелис
источник
1

С пользовательским индексом:

$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"]
    )
Тимоти Нванвене
источник
1
массив не может быть объединен, как это
Battle Hawk
Вероятно, он хотел использовать плюс (+) вместо запятой (.)
Erdinç Çorbacı
1

Для ассоциативного массива вы можете просто использовать слияние.

$arr = array('item2', 'item3', 'item4');
$arr = array_merge(array('item1'), $arr)
pictoru
источник