
end() 不修改数组元素本身,而是将 PHP 数组的内部指针移动到末尾元素位置,从而影响 key()、current()、next() 等依赖指针的函数行为;直接 var_dump($fruits) 看不出变化,是因为数组值未变,但其“当前游标状态”已改变。
`end()` 不修改数组元素本身,而是将 php 数组的**内部指针**移动到末尾元素位置,从而影响 `key()`、`current()`、`next()` 等依赖指针的函数行为;直接 `var_dump($fruits)` 看不出变化,是因为数组值未变,但其“当前游标状态”已改变。
在 PHP 中,每个数组都维护一个内部指针(internal pointer),用于记录当前“被选中”的元素位置。该指针独立于数组数据本身,是数组运行时的状态属性。像 current()、key()、next()、prev()、reset() 和 end() 这类函数,操作的正是这个指针,而非数组内容。
end($array) 的核心作用是:将内部指针移动至数组最后一个有效元素,并返回该元素的值。它通过引用修改数组(即 $array 本身被就地更新其指针位置),因此后续调用 key($array) 将返回最后一个键,current($array) 返回最后一个值。
来看对比示例:
// 示例 1:调用 end() 后获取 last_key $fruits = ['apple', 'cranberry', 'banana', 'cranberry']; end($fruits); // ✅ 移动指针到索引 3(最后一个元素) $last_key = key($fruits); // → int(3) var_dump($fruits[$last_key]); // string(9) "cranberry"
// 示例 2:未调用 end(),指针仍在起始位置(索引 0) $fruits = ['apple', 'cranberry', 'banana', 'cranberry']; $last_key = key($fruits); // → int(0),因为初始指针指向第一个元素 var_dump($fruits[$last_key]); // string(5) "apple"
⚠️ 关键注意点:
- end() 不会改变数组结构或值,var_dump($fruits) 输出完全相同,仅内部指针偏移;
- 指针状态是可变的、有副作用的——同一数组在不同时间调用 key() 可能返回不同结果;
- 若需安全获取最后一个键值对(不改变原数组状态),推荐使用更明确、无副作用的方式:
$last_key = array_key_last($fruits); // PHP 7.3+,推荐 ✅ $last_value = $fruits[$last_key] ?? null;
或兼容旧版本:
$keys = array_keys($fruits); $last_key = end($keys); // 注意:这里 end() 作用于 $keys 数组,不影响 $fruits $last_value = $fruits[$last_key] ?? null;
✅ 总结:end() 是一个状态变更型函数,其价值在于配合其他指针函数实现遍历控制;若仅需读取末尾元素,请优先选用 array_key_last() + 直接下标访问,避免意外改变数组指针,提升代码可预测性与可维护性。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











