推荐使用 array_key_last()(PHP 7.3+)获取最后一个键,它不修改内部指针、性能好且安全;若用 end() + key() 需注意指针被改变,后续遍历前应调用 reset()。

用 end() + key() 获取最后一个键值对
PHP 数组没有内置的“是否为末尾元素”判断函数,但你可以通过移动内部指针拿到最后一个元素的值和键,再和当前遍历项比对。常见于 foreach 中标记末尾逻辑(比如加逗号、闭合标签)。
注意:end() 会修改数组的内部指针位置,后续再用 current() 或 next() 会从末尾开始;如果原数组后续还要遍历,得先用 reset() 回到开头。
-
end($arr)返回最后一个元素的值,并将指针移到末尾 -
key($arr)此时返回最后一个元素的键(支持关联数组) - 若只关心“当前是不是最后一个”,可提前算出
count($arr) - 1,在循环中比对索引
用 foreach + 索引计数判断(适用于数字索引数组)
如果你的数组是顺序数字键(或可用 array_values() 重置),最稳的方式是用 for 或带计数的 foreach:
$arr = ['a', 'b', 'c'];
$len = count($arr);
foreach ($arr as $i => $item) {
if ($i === $len - 1) {
echo "这是最后一个:$item";
}
}这个方法不依赖内部指针,也不怕键名乱序,但前提是键确实是连续整数。遇到 ['a' => 1, 'z' => 2] 这类关联数组就失效了。
立即学习“PHP免费学习笔记(深入)”;
用 array_key_last()(PHP 7.3+)直接取最后一个键
PHP 7.3 起新增了 array_key_last(),它不改变指针、不重建数组,纯读取,性能好且语义清晰:
-
array_key_last($arr)返回最后一个键(存在则返回,否则null) - 配合
key()在foreach中实时比对:if (key($arr) === array_key_last($arr)) - 注意:该函数对空数组返回
null,使用前建议!empty($arr)判断
比 end() + key() 更安全,尤其在多线程或复用数组场景下——毕竟不改指针,就不会影响别人。
别踩坑:end() 在引用赋值或函数参数里行为诡异
下面这段代码很容易出错:
function foo($arr) {
end($arr); // 这里修改的是副本,不影响原数组指针
return key($arr);
}
$arr = [1,2,3];
foo($arr); // 返回 2(最后一个键),但原数组指针仍在开头
var_dump(current($arr)); // 输出 1,不是 3更隐蔽的问题是:如果数组是引用传入(&$arr),或你在对象属性里反复调用 end(),指针状态容易失控。线上 debug 时发现“明明刚 end() 过,current() 却不是最后一个”,八成是这里被别的逻辑悄悄挪动了指针。
真要稳妥,要么用 array_key_last()(推荐),要么每次需要时都重新 end() 一次并接受副作用,别指望指针状态能跨函数保持一致。



















