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

web*_*web 142 php arrays

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

$arr[] = $item;
Run Code Online (Sandbox Code Playgroud)

但是如何将它插入到开头呢?

Tra*_*v L 235

使用array_unshift($ array,$ item);

$arr = array('item2', 'item3', 'item4');
array_unshift($arr , 'item1');
print_r($arr);
Run Code Online (Sandbox Code Playgroud)

会给你

Array
(
 [0] => item1
 [1] => item2
 [2] => item3
 [3] => item4
)
Run Code Online (Sandbox Code Playgroud)

  • 如果你需要文字键而不是数字键呢? (6认同)
  • @Evan,`array_unshift`的文档说下面的`所有数值数组键都将被修改为从零开始计数,而文字键不会被触及. (4认同)
  • 如果您有关联数组或需要保留键,请参阅此处的用户示例:https://www.php.net/manual/en/function.array-unshift.php 有几个很好的示例说明如何实现此目的! (2认同)

tih*_*ihe 92

如果是关联数组或编号数组,您不想更改数组键:

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

$arr = $firstItem + $arr;
Run Code Online (Sandbox Code Playgroud)

array_merge 不起作用,因为它总是重新索引数组.

  • 这确实是最好的答案! (6认同)
  • 注意!"+运算符返回附加到左侧数组的右侧数组;对于存在于两个数组中的键,将使用左侧数组中的元素,右侧数组中的匹配元素将是忽略". - 请参阅:/sf/answers/149806611/ (3认同)

nit*_*ito 23

PHP7.4开始,您可以使用扩展运算符,与 JavaScript 非常相似

$arr = [$item, ...$arr];
Run Code Online (Sandbox Code Playgroud)

https://wiki.php.net/rfc/spread_operator_for_array

再举几个例子:

// Add an item before
$arr = [$item, ...$arr];

// Add an item after
$arr = [...$arr, $item];

// Add a few more
$arr = [$item1, $item2, ...$arr, $item3];

// Multiple arrays and and items
$arr = [$item1, ...$arr1, $item2, ...$arr2, $item3];
Run Code Online (Sandbox Code Playgroud)
  • 注意:这仅适用于 int 键,不适用于关联数组。
  • 注2:密钥不保留。

破坏示例:

$car = ['brand' => 'Audi', 'model' => 'A8'];
$engine = ['cylinder' => 6, 'displacement' => '3000cc'];

$merged = [...$car, ...$engine];

var_dump($merged);
Run Code Online (Sandbox Code Playgroud)

将导致:

[错误]无法使用字符串键解压数组

  • @crafter 你的权利,我解决了这个问题 (2认同)

pic*_*oru 10

对于关联数组,您可以只使用合并。

$arr = array('item2', 'item3', 'item4');
$arr = array_merge(array('item1'), $arr)
Run Code Online (Sandbox Code Playgroud)


小智 9

使用array_unshift()插入数组中的第一个元素。

使用array_shift()删除数组的第一个元素。

  • 答案最好有例子 (3认同)

Man*_*ruw 9

使用字符串/自定义键关联数组的开头插入一个项目

<?php

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

$array = array_reverse($array);

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

$array = array_reverse($array);
Run Code Online (Sandbox Code Playgroud)

结果

[
  'newKey' => 'newValue',
  'keyOne' => 'valueOne',
  'keyTwo' => 'valueTwo'
]
Run Code Online (Sandbox Code Playgroud)


小智 7

有两种解决方案:

  1. 如果您有一个包含对您重要的键的数组
$new = ['RLG' => array(1,2,3)];
$array = ['s' => array(2,3), 'l' => [], 'o' => [], 'e' => []];

$arrayWithNewAddedItem = array_merge($new, $array);
Run Code Online (Sandbox Code Playgroud)
  1. 如果你有一个没有任何键的数组。
array_unshift(array, value1);
Run Code Online (Sandbox Code Playgroud)


Max*_*eat 6

使用功能 array_unshift