end()函数将数组指针移至末尾并返回最后一个元素值,会改变原数组指针位置;PHP 7.3+推荐用array_key_last()配合键取值以避免修改指针。

用 end() 函数直接获取并移动内部指针
end() 是最常用也最直接的方式,它把数组的内部指针移到最后一个元素,并返回该元素的值。注意:它会改变原数组的指针位置,如果后续还要用 current()、next() 等函数,得先用 reset() 回到开头。
- 适用于所有索引数组(包括数字键不连续、键名乱序的情况)
- 不依赖键是否为整数或是否从 0 开始
- 返回的是值,不是键;如果还需要键,得配合
key()
$arr = [10, 20, 30, 40]; echo end($arr); // 输出 40 echo current($arr); // 输出 40(因为指针已停在末尾) reset($arr); // 恢复指针到开头才安全继续遍历
用 array_key_last() + $arr[...] 安全取值(PHP 7.3+)
如果你不想改动数组指针,又用的是 PHP 7.3 或更高版本,array_key_last() 是更干净的选择。它只读取最后一个键,不修改状态,再用这个键去取值即可。
- 不会影响数组内部指针,适合在循环中安全使用
- 要求 PHP ≥ 7.3,低版本会报
Call to undefined function array_key_last() - 对空数组返回
null,记得判空避免 Notice
$arr = ['a' => 1, 'b' => 2, 'c' => 3];
$lastKey = array_key_last($arr);
if ($lastKey !== null) {
echo $arr[$lastKey]; // 输出 3
}
用 count() 和 array_keys() 兼容老版本 PHP
PHP 5.6–7.2 没有 array_key_last(),但可以用 array_keys() 拿出所有键,再用 count() - 1 索引取最后一个键——前提是数组是标准索引数组(键为 0,1,2,…)。如果键不连续或含字符串,这方法会出错。
- 仅推荐用于确定是「纯整数、从 0 开始、连续」的索引数组
- 对
[0 => 'x', 2 => 'y']这类跳键数组,count()-1得到 1,但键 1 并不存在,会触发Notice: Undefined offset - 性能略差,因为
array_keys()要复制一遍键数组
$arr = [100, 200, 300]; $keys = array_keys($arr); $last = $arr[$keys[count($keys) - 1]]; // 安全,因为 keys 是真实存在的键
为什么不用 $arr[count($arr)-1]?
看起来最直觉,但隐患最多:它假设键是连续整数且从 0 开始。一旦数组是 [5 => 'a', 10 => 'b'],count() 返回 2,$arr[1] 就是未定义的,直接报错或返回 null。
立即学习“PHP免费学习笔记(深入)”;
- PHP 不保证索引数组的键一定连续,尤其是经过
unset()、array_filter()后 - 即使当前数据没问题,代码可维护性差——别人改了数组构造逻辑,这里就悄悄崩了
- 比
end()多一次计算,还少一层健壮性
实际项目里,优先选 end()(简单场景)或 array_key_last()(需保持指针稳定),别图省事硬算下标。数组键的不确定性,比你想象中更容易在重构时暴露出来。



















