`end()` 將陣列內部指標移至**最後一個元素**並返回其**值**;`reset()` 移至第一個。本文說明語法、指標操作、配合 `key()`/`current()` 取得鍵值、常見陷阱與替代方案。
mixed end ( array &$array )
成功返回最後元素值,陣列為空返回 `false`。直接修改原陣列指標。
<?php
$users = ['baidu.com', 'haosou.com', 'sina.com', 'jb51.net'];
echo end($users); // jb51.net
// 配合 key() 取得鍵名
end($users);
echo key($users); // 3 (數字索引)
$assoc = ['a' => 1, 'b' => 2, 'c' => 3];
end($assoc);
echo key($assoc); // 'c'
echo current($assoc); // 3
?>
| 函數 | 指標移動 | 返回值 |
|---|---|---|
| reset() | 第一個元素 | 第一個元素值 |
| end() | 最後一個元素 | 最後一個元素值 |
| next() | 下一個 | 下一個元素值 |
| prev() | 上一個 | 上一個元素值 |
| current() | 不移動 | 當前元素值 |
| key() | 不移動 | 當前元素鍵名 |
| each() | 下一個 | [key, value] 陣列 (PHP 7.2 棄用) |
<?php
$arr = ['a', 'b', 'c'];
// foreach (推薦)
foreach ($arr as $k => $v) { ... }
// array_* 函數族
array_walk($arr, fn($v, $k) => ...);
array_map(fn($v) => ..., $arr);
array_filter($arr, fn($v) => ...);
array_reduce($arr, fn($carry, $v) => ..., $initial);
// 只需最後元素
$last = $arr[count($arr) - 1]; // 索引陣列
$last = array_values($arr)[count($arr)-1]; // 關聯陣列取值
$last = array_pop($arr); // 會移除元素(副作用)
$last = end($arr); // 不移除,但移動指標
?>
// 索引陣列
$last = $arr[count($arr) - 1] ?? null;
// 關聯陣列(取值)
$last = array_values($arr)[count($arr) - 1] ?? null;
// 關聯陣列(取鍵值)
$keys = array_keys($arr);
$lastKey = $keys[count($keys) - 1] ?? null;
$lastVal = $arr[$lastKey] ?? null;
// PHP 7.3+ array_key_last()
$lastKey = array_key_last($arr);
$lastVal = $arr[$lastKey] ?? null;
理解 `end()` 移動指標的副作用,並在現代代碼中優先使用無副作用的替代方案,能寫出更健壯的陣列處理邏輯。