为啥 array_pop() 返回数组的最后一项而不是删除它? [关闭]

Posted

技术标签:

【中文标题】为啥 array_pop() 返回数组的最后一项而不是删除它? [关闭]【英文标题】:Why is array_pop() returning the last item of the array instead of deleting it? [closed]为什么 array_pop() 返回数组的最后一项而不是删除它? [关闭] 【发布时间】:2018-04-27 20:58:21 【问题描述】:

array_pop() 正在返回数组的最后一项,而不是删除数组的最后一项。为什么会这样?

$blam = 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
$blam = explode("/", $blam); 
$blam = array_pop($blam);
print_r($blam);

You can test out the php here.

【问题讨论】:

你正在用最后一项覆盖变量... array_pop() 返回从数组中弹出的元素;并通过引用修改数组......如PHP Docs 中所述 也许在这一点上看起来很明显,但只是为了明确说明,如果您只想删除最后一项,请使用array_pop($blam); 而不是$blam = array_pop($blam); 再次否决仙女,完全合法的问题可能会帮助其他人,因为它帮助了我......这不是一个明显的错误 在所有给出的答案中,这是一个非常重要的问题。我发现了很多很棒的知识。为什么船这么轻? 【参考方案1】:

您正在覆盖该变量。如果您需要删除的值,请将其更改为

$foo = array_pop($blam);

函数按预期运行。来自docs:

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

当你使用

$blam = array_pop($blam);

你是说: “从$blam 中删除最后一个元素并将其存储在$blam 中”,用该元素替换之前的内容。

详细地说,我认为这里的混淆是 array_pop 不返回新数组,而是返回删除的值正在改变原始数组。

【讨论】:

【参考方案2】:

问题

您正在正确地执行弹出操作,但您立即将当前删除的元素分配给变量 $blam。所以它有效地使该变量保持值,即被弹出的元素。

解决方案

不要将pop函数返回的值赋给变量。

代码

$blam = 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
$blam = explode("/", $blam); 
array_pop($blam);
print_r($blam);

【讨论】:

以上是关于为啥 array_pop() 返回数组的最后一项而不是删除它? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

php array_pop()数组函数将数组最后一个单元弹出(出栈)

array_pop

Xamarin Forms Firebase DeleteAsync 逻辑 - 为啥删除第一项而不是第二项?

检索子文档中数组的第一项而不获取其他子文档

Django save request.POST to JSONField 从列表中选择最后一项而不是保存列表

如何告诉 jquery 自动完成每行显示一项而不是一行中的整个返回值?