需求:從關聯陣列找出值最大的項目並取得其鍵名。例如找出班級最高分同學姓名。
$arr = ['tom'=>9, 'jack'=>3, 'kim'=>5, 'hack'=>4]; asort($arr); // 依值升序,保留鍵名 $keys = array_keys($arr); $maxKey = end($keys); // 取最後一個鍵 echo $maxKey; // tom
$maxKey = array_search(max($arr), $arr); echo $maxKey; // tom
$maxKey = '';
$maxVal = -INF;
foreach ($arr as $k => $v) {
if ($v > $maxVal) {
$maxVal = $v;
$maxKey = $k;
}
}
echo $maxKey; // tom
$maxVal = max($arr); $maxKeys = array_keys($arr, $maxVal); // 返回所有最大值的鍵 print_r($maxKeys);
| 方法 | 時間複雜度 | 備註 |
|---|---|---|
| asort + end | O(n log n) | 會修改原陣列順序 |
| max + array_search | O(2n) | 遍歷兩次,程式碼簡潔 |
| foreach 單次遍歷 | O(n) | 最快、不修改原陣列 |
依資料量與程式碼風格選擇;大量資料建議用單次遍歷。