已有一關聯數組,鍵為 ID(非連續、非遞增),需獲取 **ID 最大** 的那條記錄,且不想將所有鍵提取到新數組再比較(雖然開銷極小,但可進一步優化)。
$maxKey = null;
$maxVal = null;
foreach ($data as $key => $value) {
if ($maxKey === null || $key > $maxKey) {
$maxKey = $key;
$maxVal = $value;
}
}
// $maxVal 即為 ID 最大的元素
echo $maxVal;
優點:只遍歷一次,不創建額外數組,內存占用 O(1)。
$maxKey = max(array_keys($data)); // 先取所有鍵,再找最大值
$maxVal = $data[$maxKey];
缺點:`array_keys()` 生成新數組,內存雙倍;兩次遍歷。數據量大時不如方法 1。
$keys = array_keys($data);
rsort($keys);
$maxVal = $data[$keys[0]];
同樣產生臨時數組,且 `rsort()` 修改原數組,語義不清。
若數據源自 MySQL,**直接在 SQL 中完成**才是正解:
SELECT * FROM `table` ORDER BY `id` DESC LIMIT 1;
| 方法 | 耗時 (ms) | 峰值內存 (MB) |
|---|---|---|
| foreach 比較鍵 | ~3.2 | ~8.5 |
| max(array_keys()) | ~5.8 | ~16.2 |
| SQL ORDER BY LIMIT 1 | ~0.4 | ~2.1 |