PHP Conference Japan 2024

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"
  }
}

參見

新增筆記

使用者貢獻筆記 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;
?>

現在陣列看起來如下

array(
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
Anonymous
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 年前
Anonymous 的關聯版本對我不起作用,但經過這個小小的調整後就可以了

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