array_pop

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

array_pop从数组末尾弹出元素

描述

array_pop(array &$array): mixed

array_pop() 弹出并返回 array 的最后一个元素的值,并将 array 缩短一个元素。

注意: 此函数将在使用后 reset() 输入数组的 array 指针。

参数

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 notes

79
elad dot yosifon at gmail dot com
11 年前
注意
array_pop() 的复杂度为 O(1)。
array_shift() 的复杂度为 O(n)。
array_shift() 需要对数组进行重新索引处理,因此它必须遍历所有元素并对其进行索引。
5
noreply at i-asm dot com
3 年前
请注意,当您尝试从数组中弹出元素时,array_pop 不会发出任何警告或错误,即使该数组已经为空。这很奇怪!而且会导致级联错误,很难在不知道真正原因的情况下解决。

它似乎只是默默地返回了一个 NULL 对象,而不是错误,因此在我的情况下,我最终得到了关于访问具有无效索引的数组元素的警告,因为我预计会弹出数组。这种行为(以及缺乏任何警告,因为许多琐碎的事情被冗长地抱怨)在以上手册中没有提到。弹出已经为空的堆栈绝对应该触发某种通知,以帮助调试。

当然,将弹出操作包装在 if (count($array)) 中可能是好习惯,但如果尝试执行应该失败且显然不会返回有意义结果的操作没有返回错误,那么应该在手册中建议这样做。
7
mcgroovin at gmail dot com
15 年前
我编写了一个简单的函数来对多个(无限制)数组执行交集。

传递一个包含要比较的所有数组的数组,以及要匹配的键。

<?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;
}
?>
2
Anonymous
10 年前
如果您将已拆分的数组放入 array_pop 中,将抛出 Strict Standards
<?php
$a
= array_pop(explode(",", "a,b,c"));
echo
$a;
?>

您将看到
PHP Strict Standards: 在 - 第 2 行中,只能传递变量作为引用。

PHP Strict Standards: 在 - 第 2 行中,只能传递变量作为引用。
c

请注意,您应该为 explode 函数分配一个变量,然后将该变量引用传递到 array_pop 中,以避免 Strict Standard 警告。
2
rmondragon at gmail dot com
19 年前
在之前的示例中...
<?php
function array_trim ( $array, $index ) {
if (
is_array ( $array ) ) {
unset (
$array[$index] );
array_unshift ( $array, array_shift ( $array ) );
return
$array;
}
else {
return
false;
}
}
?>

这有一个问题。如果您取消设置最后一个值,然后使用
<?
array_unshift ( $array, array_shift ( $array ) );
?>

将返回:Array ( [0] => )
因此您可以使用以下方法修复它...

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

祝您好运;)
1
qeremy
12 年前
为了 array_unshift() 的缘故
:)

<?php
function 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] => 橙色
[1] => 香蕉
[2] => 苹果
[3] => 树莓
)
1
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 是浪费资源。
1
匿名
19 年前
strrchr 比使用 array_pop 的其他示例更有效地用于查找文件的扩展名。例如

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

如果文件有扩展名,则 $ext 将包含文件的扩展名,包括一个“.”,如果文件没有扩展名,则为 FALSE。如果文件有多个扩展名,例如“filename.tar.gz”,则此构造将只返回最后一个扩展名。
1
Alex Chac?n
21 年前
[email protected]
你好
这里有一个函数可以从数组中删除元素并重新计算索引

<?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;
}
?>
0
doyley3731 at gmail dot com
16 年前
当我使用此函数时遇到问题,因为我的数组完全由数字组成,所以我创建了自己的函数。希望它对某些人有用。

function array_trim_end($array){

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

return $array;
}
-2
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