PHP Conference Japan 2024

array_unshift

(PHP 4, PHP 5, PHP 7, PHP 8)

array_unshift将一个或多个元素添加到数组的开头

描述

array_unshift(数组 &$array, 混合 ...$values): int

array_unshift() 将传递的元素添加到 array 的开头。请注意,元素列表作为一个整体被添加到开头,因此添加到开头的元素保持相同的顺序。所有数字数组键将被修改为从零开始计数,而文字键不会更改。

注意:

将数组的内部指针重置为第一个元素。

参数

array

输入数组。

values

要添加到开头的值。

返回值

返回 array 中的新元素数量。

变更日志

版本 描述
7.3.0 此函数现在可以只用一个参数调用。以前,至少需要两个参数。

示例

示例 #1 array_unshift() 示例

<?php
$queue
= [
"orange",
"banana"
];

array_unshift($queue, "apple", "raspberry");
var_dump($queue);
?>

以上示例将输出

array(4) {
  [0] =>
  string(5) "apple"
  [1] =>
  string(9) "raspberry"
  [2] =>
  string(6) "orange"
  [3] =>
  string(6) "banana"
}

示例 #2 与关联数组一起使用

如果一个关联数组被添加到另一个关联数组的开头,则添加到开头的数组将被数字索引到前一个数组中。

<?php
$foods
= [
'apples' => [
'McIntosh' => 'red',
'Granny Smith' => 'green',
],
'oranges' => [
'Navel' => 'orange',
'Valencia' => 'orange',
],
];
$vegetables = [
'lettuce' => [
'Iceberg' => 'green',
'Butterhead' => 'green',
],
'carrots' => [
'Deep Purple Hybrid' => 'purple',
'Imperator' => 'orange',
],
'cucumber' => [
'Kirby' => 'green',
'Gherkin' => 'green',
],
];

array_unshift($foods, $vegetables);
var_dump($foods);

以上示例将输出

array(3) {
  [0] =>
  array(3) {
    'lettuce' =>
    array(2) {
      'Iceberg' =>
      string(5) "green"
      'Butterhead' =>
      string(5) "green"
    }
    'carrots' =>
    array(2) {
      'Deep Purple Hybrid' =>
      string(6) "purple"
      'Imperator' =>
      string(6) "orange"
    }
    'cucumber' =>
    array(2) {
      'Kirby' =>
      string(5) "green"
      'Gherkin' =>
      string(5) "green"
    }
  }
  'apples' =>
  array(2) {
    'McIntosh' =>
    string(3) "red"
    'Granny Smith' =>
    string(5) "green"
  }
  'oranges' =>
  array(2) {
    'Navel' =>
    string(6) "orange"
    'Valencia' =>
    string(6) "orange"
  }
}

参见

添加注释

用户贡献的注释 12 条注释

211
sergei at gmx dot net
17 年前
如果您执行以下操作,您可以保留键并以非常简单的方式将具有数字索引的数组添加到开头

<?php
$someArray
=array(224=>'someword1', 228=>'someword2', 102=>'someword3', 544=>'someword3',95=>'someword4');

$someArray=array(100=>'Test Element 1 ',255=>'Test Element 2')+$someArray;
?>

现在数组如下所示

数组(
100=>'Test Element 1 ',
255=>'Test Element 2'
224=>'someword1',
228=>'someword2',
102=>'someword3',
544=>'someword3',
95=>'someword4'
);
37
rsmith_NOSPAM_ at _NOSPAM_unitec dot ac dot nz
22 年前
array_merge() 也会重新索引(参见 array_merge() 手册条目),但 '+' 运算符不会,所以...

<?php
$arrayone
=array("newkey"=>"newvalue") + $arrayone;
?>

可以完成这项工作。
35
匿名
13 年前
Sahn 的示例几乎可以工作,但有一个小错误。如果您需要在不重新索引键的情况下将某些内容添加到数组的开头,或者需要添加键值对,请尝试以下方法,您可以使用此简短函数

<?php
function array_unshift_assoc(&$arr, $key, $val)
{
$arr = array_reverse($arr, true);
$arr[$key] = $val;
return =
array_reverse($arr, true);
}
?>
10
daniel at smallboxcms dot com
9 年前
匿名的关联版本对我来说不起作用,但使用这个小调整后它可以工作

function array_unshift_assoc(&$arr, $key, $val)
{
$arr = array_reverse($arr, true);
$arr[$key] = $val;
$arr = array_reverse($arr, true);
return $arr;
}
2
amschroeder at gmail dot com
17 年前
如果您手动排序时数组的索引乱序,这就会变成一个小问题。例如

<?php
$recordMonths
[3] = '8/%/2006';
$recordMonths[4] = '7/%/2004';
$recordMonths[0] = '3/%/2007';
$recordMonths[1] = '2/%/2007';
$recordMonths[5] = '12/%/2000';
$recordMonths[6] = '11/%/2000';
$recordMonths[7] = '10/%/2000';
$recordMonths[2] = '1/%/2007';

for(
$i = 0; $i < count($recordMonths); $i++)
{
$singleMonth = $recordMonths[$i];
echo
"singleMonth: $singleMonth <br />";
}
array_unshift($recordMonths,'%');
for(
$i = 0; $i < count($recordMonths); $i++)
{
$singleMonth = $recordMonths[$i];
echo
"singleMonth: $singleMonth <br />";
}
?>

输出结果

singleMonth: 3/%/2007
singleMonth: 2/%/2007
singleMonth: 1/%/2007
singleMonth: 8/%/2006
singleMonth: 7/%/2004
singleMonth: 12/%/2000
singleMonth: 11/%/2000
singleMonth: 10/%/2000
singleMonth: %
singleMonth: 8/%/2006
singleMonth: 7/%/2004
singleMonth: 3/%/2007
singleMonth: 2/%/2007
singleMonth: 12/%/2000
singleMonth: 11/%/2000
singleMonth: 10/%/2000
singleMonth: 1/%/2007

它根据创建的顺序重新索引了数组。看起来,如果数组的所有索引都是数字,那么它应该根据索引的顺序重新索引它们。这只是我的看法……
2
php at electricsurfer dot com
20年前
更简单的引用前置!
<?php
/**
* @return int
* @param $array array
* @param $value mixed
* @desc 将元素的引用前置到数组的开头。重新编号数字键,因此 $value 始终插入到 $array[0]
*/
function array_unshift_ref(&$array, &$value)
{
$return = array_unshift($array,'');
$array[0] =& $value;
return
$return;
}
?>
2
robert dot wills at fuzzbrain dot uklinux dot net
22 年前
实际上,键被重新索引的问题只发生在键为数字时。

<?php

$a
= array("f"=>"five", "s" =>"six", "t" =>
"twenty");

print_r($a);
echo
"\n";
foreach(
$a as $key=>$val)
{
echo
"k: $key v: $val \n";
}

array_unshift($a, "zero");
print_r($a);
echo
"\n";
foreach(
$a as $key=>$val)
{
echo
"k: $key v: $val \n";
}
?>

数组
(
[f] => five
[s] => six
[t] => twenty
)

k: f v: five
k: s v: six
k: t v: twenty
数组
(
[0] => zero
[f] => five
[s] => six
[t] => twenty
)

k: 0 v: zero
k: f v: five
k: s v: six
k: t v: twenty
0
eliasritter168667 at gmail dot com
1年前
如果您想将键值对前置到数组的开头,此函数很有帮助。

function array_kunshift(array $array, string|int $key, mixed $value): array {
return array_merge([$key => $value], $array);
}
0
Richard Akindele
8年前
另一种将某些内容附加到数组开头的的方法是使用 array_merge()。

$plans = array('AARP'=>'Senior', 'AAA'=>'Automobile Club');

$plans = array_merge(array("BAR"=>"Best Available Rate"), $plans);
-1
chris dot NoThxSpam dot given at hp dot com
21年前
如果您需要更改键的名称而不更改其在数组中的位置,则此函数可能很有用。

<?php
function array_key_change($Old, $New, $In, $NewVal=NULL) {
$Temp = array();
while(isset(
$Temp[$Old]) == false) {
list(
$k, $v) = each($In);
$Temp[$k] = $v;
unset(
$In[$k]);
}
if(
$NewVal == NULL) {
$NewVal = $Temp[$Old];
}
unset(
$Temp[$Old]);
$Temp = array_reverse($Temp);
$In = array_merge(array($New=>$NewVal), $In);
while(list(
$k,$v) = each($Temp)) {
$In = array_merge(array($k=>$v), $In);
}
return(
$In);
}
?>
-2
sahn at hmc dot edu
23年前
如果您需要将某些内容前置到数组中而无需重新索引键,或者需要前置键值对,您可以使用此简短函数。

<?php
function array_unshift_assoc(&$arr, $key, $val)
{
$arr = array_reverse($arr, true);
$arr[$key] = $val;
$arr = array_reverse($arr, true);
return
count($arr);
}
?>
-5
John Brooking
18年前
我今晚需要将一个基于 1 的数字数组转换为基于 0 的数组,并发现以下方法由于重新编号的“副作用”而运行良好。

<?php
array_unshift
( $myArray, array_shift( $myArray ));
?>
To Top