array_unshift

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

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

描述

array_unshift(array &$array, mixed ...$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"
  }
}

参见

添加注释

用户贡献的注释 13 个注释

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

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

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

现在数组如下所示

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

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

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

<?php
function array_unshift_assoc(&$arr, $key, $val)
{
$arr = array_reverse($arr, true);
$arr[$key] = $val;
return =
array_reverse($arr, true);
}
?>
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;
}
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

它根据创建顺序重新索引。 如果数组具有所有数字索引,那么它似乎应该根据其索引的顺序重新索引它们。 仅供参考...
php at electricsurfer dot com
20 年前
更简单的引用 unshift!
<?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;
}
?>
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
eliasritter168667 at gmail dot com
9 个月前
如果您想将键值对预先添加到数组的开头,此函数将很有帮助。

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

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

$plans = array_merge(array("BAR"=>"Best Available Rate"), $plans);
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);
}
?>
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);
}
?>
John Brooking
18 年前
我今晚需要将数字数组从 1 索引转换为 0 索引,发现以下方法由于重新编号的“副作用”而工作得很好。

<?php
array_unshift
( $myArray, array_shift( $myArray ));
?>
lagroue
20 年前
PHP 的最后一个版本弃用了引用的 unshift。
您可以改用此函数。

<?php
function array_unshift1 (& $ioArray, $iValueWrappedInAnArray) {
$lNewArray = false;
foreach (
array_keys ($ioArray) as $lKey)
$lNewArray[$lKey+1] = & $ioArray[$lKey];
$ioArray = array (& $iValueWrappedInAnArray[0]);
if (
$lNewArray)
foreach (
array_keys ($lNewArray) as $lKey)
$ioArray[] = & $lNewArray[$lKey];
return
count($ioArray);
}

// 最后一个 PHP 之前(现在会生成弃用警告)
array_unshift ($a, &$v);
// 从最后一个 PHP 开始(注意,有一个包装数组!!)
array_unshift1 ($a, array (&$v));
?>
To Top