好的,
我知道所有关于 array_pop()
,但这会删除最后一个元素。如何获取数组的最后一个元素而不删除它?
这是一个奖励:
$array = array('a' => 'a', 'b' => 'b', 'c' => 'c');
甚至
$array = array('a', 'b', 'c', 'd');
unset($array[2]);
echo $array[sizeof($array) - 1]; // Output: PHP Notice: Undefined offset: 2 in - on line 4
原文由 Theodore R. Smith 发布,翻译遵循 CC BY-SA 4.0 许可协议
该线程中的许多答案为我们提供了许多不同的选择。为了能够从中进行选择,我需要了解他们的行为和表现。在这个答案中,我将与您分享我的发现,以 PHP 版本
5.6.38
、7.2.10
和7.3.0RC1
( 预计 12 月 1 日)我将测试的选项(
<<option code>>
s)是:$x = array_values(array_slice($array, -1))[0];
(由 rolacja 建议)$x = array_slice($array, -1)[0];
(由 Stoutie 建议)$x = array_pop((array_slice($array, -1)));
(由 rolacja 建议)$x = array_pop((array_slice($array, -1, 1)));
(由 Westy92 建议)$x = end($array); reset($array);
(由 Iznogood 建议)$x = end((array_values($array)));
(由 TecBrat 建议)$x = $array[count($array)-1];
(由 Mirko Pagliai 建议)$keys = array_keys($array); $x = $array[$keys[count($keys)-1]];
(由 thrau 建议)$x = $array[] = array_pop($array);
(由 user2782001 建议)$x = $array[array_key_last($array)];
(由 Quasimodo 的克隆 建议;根据 PHP 7.3 提供)(提到的函数: array_key_last 、 array_keys 、 array_pop 、 array_slice 、 array_values 、 count 、 end 、 reset )
测试输入(
<<input code>>
s)与:$array = null;
$array = [];
$array = ["a","b","c",null];
$array = ["a","b","c","d"];
$array = []; $array[1] = "a"; $array[2] = "b"; $array[0] = "c";
$array = []; for($i=0;$i<100;$i++) { $array[] = $i; }
$array = []; for($i=0;$i<100000;$i++) { $array[] = $i; }
为了进行测试,我将使用
5.6.38
、7.2.10
和7.3.0RC1
PHP docker 容器,例如:上面列出的
<<option code>>
s 和<<input code>>
s 的每个组合都将在所有 PHP 版本上运行。对于每个测试运行,使用以下代码片段:对于每次运行,这将 var_dump 最后检索到的测试输入的最后一个值,并 以飞秒(0.000000000000001 秒)打印一次迭代的平均持续时间。
结果如下:
上面提到的 致命、 警告 和 注意 代码翻译为:
基于此输出,我得出以下结论:
$x = end((array_values($array)));
$keys = array_keys($array); $x = $array[$keys[count($keys)-1]];
$x = end($array); reset($array);
$x = $array[count($array)-1];
$x = $array[] = array_pop($array);
$x = $array[array_key_last($array)];
(PHP 7.3 起)$x = $array[count($array)-1];
(由于使用count
)$x = $array[] = array_pop($array);
(由于赋值丢失原始键)$x = end($array); reset($array);
$x = end((array_values($array)));
array_key_last
函数似乎没有上述任何限制,除了在撰写本文时仍然是 RC(所以使用 RC 或等待它在 2018 年 12 月发布):$x = $array[array_key_last($array)];
(PHP 7.3 起)取决于 将数组用作堆栈还是队列,您可以对选项 9 进行更改。