如何在PHP的数组开头插入项目?


167

我知道如何通过以下方式将其插入到末尾:

$arr[] = $item;

但是如何将其插入到开始呢?


2
$arr[-1] = $item;在这里找到:stackoverflow.com/a/15252657/669677

4
@ 2astalavista,不工作:print_r($arr)=>Array ( [0] => a, [1] => b, [-1] => c )
洛朗

@ returnthis.lau_在这种情况下,您应该使用for循环-从-1开始- for ($i = -1; $i < count($a)-1; $i++)如所引用的链接所示,但是很容易忘记,因此我不再喜欢该解决方案。

Answers:


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 不起作用,因为它总是为数组重新索引。


6
这确实是最好的答案!
Ankit

5
注意!“ +运算符返回添加到左侧数组的右侧数组;对于两个数组中都存在的键,将使用左侧数组中的元素,而右侧数组中的匹配元素将被使用忽略了。” -请参阅:stackoverflow.com/a/2140094/3411766
cottton,

这个解决方案很好,因为可以添加带有索引的项目,而不必为数组重新索引;但是,如果在左手数组中有相同的索引,则只需要注意删除右手数组中的项。
纳比·卡兹


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

或者,您可以使用临时数组,然后如果要在循环中进行更改,则删除实际的数组:

$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
数组不能像这样串联
战鹰队

大概他打算用加号(+)代替逗号(。)
ErdinçÇorbacıJun

1

对于关联数组,您可以仅使用merge。

$arr = array('item2', 'item3', 'item4');
$arr = array_merge(array('item1'), $arr)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.