2024 年 PHP 日本研討會

array_pop

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

array_pop將陣列尾端的元素彈出

說明

array_pop(陣列 &$array): 混合

array_pop() 會彈出並返回 array 最後一個元素的值,並將 array 的元素數量減少一個。

注意這個函式在使用後會將輸入陣列的陣列指標 reset()

參數

array

要取得值的陣列。

回傳值

返回 array 最後一個元素的值。如果 array 為空,則會返回 null

範例

範例 #1 array_pop() 範例

<?php
$stack
= array("orange", "banana", "apple", "raspberry");
$fruit = array_pop($stack);
print_r($stack);
?>

執行後,$stack 將只剩下 3 個元素

Array
(
    [0] => orange
    [1] => banana
    [2] => apple
)

raspberry 會被賦值給 $fruit

參見

新增筆記

使用者貢獻的筆記 11 則筆記

elad dot yosifon at gmail dot com
11 年前
注意事項
array_pop() 的複雜度為 O(1)。
array_shift() 的複雜度為 O(n)。
array_shift() 需要對陣列進行重新索引,因此它必須遍歷所有元素並為它們建立索引。
noreply at i-asm dot com
3 年前
請注意,如果您嘗試從已經空的陣列中彈出元素,array_pop 不會發出任何警告或錯誤。這很奇怪!而且它會導致一連串的錯誤,如果不知道真正的原因,就很難解決。

它似乎並非回傳錯誤,而是靜默地回傳一個 NULL 物件,所以在我的情況下,我在其他地方收到關於以無效索引存取陣列元素的警告,因為我預期會彈出一個陣列。這種行為(以及缺乏任何警告,而許多瑣碎的事情都被詳細地抱怨)在上述手冊中並未提及。彈出一個已經空的堆疊肯定應該觸發某種通知,以幫助除錯。

當然,將 pop 包裹在 if (count($array)) 中可能是個好習慣,但如果嘗試做一些應該失敗且顯然不會返回有意義結果的事情時沒有返回錯誤,那麼手冊中應該建議這樣做。
mcgroovin at gmail dot com
16 年前
我寫了一個簡單的函式來對多個(不限數量)陣列執行交集。

傳入一個包含所有要比較陣列的陣列,以及要比對的鍵值。

<?php
function multipleArrayIntersect($arrayOfArrays, $matchKey)
{
$compareArray = array_pop($arrayOfArrays);

foreach(
$compareArray AS $key => $valueArray){
foreach(
$arrayOfArrays AS $subArray => $contents){
if (!
in_array($compareArray[$key][$matchKey], $contents)){
unset(
$compareArray[$key]);
}
}
}

return
$compareArray;
}
?>
匿名
10 年前
如果將 explode 後的陣列放到 array_pop 中,會拋出 Strict Standards 警告。
<?php
$a
= array_pop(explode(",", "a,b,c"));
echo
$a;
?>

你會看到
PHP Strict Standards: Only variables should be passed by reference in - on line 2

PHP Strict Standards: Only variables should be passed by reference in - on line 2
c

請注意,你應該為 explode 函式指定一個變數,然後將變數參考傳入 array_pop 以避免 Strict Standard 警告。
rmondragon at gmail dot com
19 年前
在先前的例子中...
<?php
函式 array_trim ( $array, $index ) {
if (
is_array ( $array ) ) {
unset (
$array[$index] );
array_unshift ( $array, array_shift ( $array ) );
return
$array;
}
else {
return
false;
}
}
?>

這個方法有個問題。如果你 unset 最後一個值,然後使用
<?
array_unshift ( $array, array_shift ( $array ) );
?>

會回傳:陣列 ( [0] => )
所以你可以這樣修正它...

<?php
if (count($array) > 0) array_unshift ( $values, array_shift ( $values ) );
?>

祝你好運 ;)
qeremy
12 年前
為了 array_unshift() 的緣故
:)

<?php
函式 array_unpop(&$arr) {
$args = func_get_args(); unset($args[0]);
$tarr = array();
foreach (
$args as $arg) {
$tarr[] = $arg;
}
$arr = array_merge($arr, $tarr);
}

$queue = array("orange", "banana");
array_unpop($queue, "apple", "raspberry");
print_r($queue);
?>

陣列
(
[0] => orange
[1] => banana
[2] => apple
[3] => raspberry
)
sonetti at hotmail dot com
16 年前
@smp_info
我覺得你還是很累。用以下程式碼有什麼問題?

<?php
$array
= array('one', 'two', 'three', 'four');

//移除最後一個元素
array_pop($array);

//$array == array('one', 'two', 'three');
?>

如同文件中清楚說明,array_pop() 不僅會回傳最後一個元素,還會將其從以傳址方式傳入的陣列中移除。呼叫 array_diff 是浪費資源。
匿名
19 年前
strrchr 比其他使用 array_pop 尋找檔案副檔名的例子更有用。例如

<?php
$ext
= strrchr($filename, ".");
?>

如果檔案有副檔名,`$ext` 會包含檔案的副檔名,包含 ".";如果檔案沒有副檔名,則為 FALSE。如果檔案有多個副檔名,例如 "filename.tar.gz",則此結構只會回傳最後一個副檔名。
Alex Chac?n
21 年前
alex.chacon@terra.com
您好
這裡有一個函式,可以從陣列中刪除元素並重新計算索引

<?php
function eliminarElementoArreglo ($array, $indice)
{
if (
array_key_exists($indice, $array))
{
$temp = $array[0];
$array[0] = $array[$indice];
$array[$indice] = $temp;
array_shift($array);

//重新調整索引
for ($i = 0 ; $i < $indice ; $i++)
{
$dummy = $array[$i];
$array[$i] = $temp;
$temp = $dummy;
}
}
return
$array;
}
?>
doyley3731 at gmail dot com
17 年前
我在使用這個函式時遇到問題,因為我的陣列完全由數字組成,所以我建立了自己的函式。希望它對某些人有用。

function array_trim_end($array){

$num=count($array);
$num=$num-1;
unset($array[$num]);

return $array;
}
Orsi
16 年前
您好,

這裡有一個簡單的函式,可以從陣列中刪除一個元素(依值)
<?php
/*
* 這個函式會從一維陣列中刪除指定的元素
* 參數: $array:陣列(輸入/輸出)
* $deleteIt:我們想要刪除的值
* $useOldKeys:如果為 false,則函式將重新索引陣列(從 0、1、...)
* 如果為 true:函式將保留舊的鍵值
* 如果此值在陣列中,則返回 true,否則返回 false(在這種情況下,陣列與之前相同)
*/
function deleteFromArray(&$array, $deleteIt, $useOldKeys = FALSE)
{
$tmpArray = array();
$found = FALSE;
foreach(
$array as $key => $value)
{
if(
$value !== $deleteIt)
{
if(
FALSE === $useOldKeys)
{
$tmpArray[] = $value;
}
else
{
$tmpArray[$key] = $value;
}
}
else
{
$found = TRUE;
}
}

$array = $tmpArray;

return
$found;
}
?>

或許這對某些人有幫助...
To Top