需求:從關聯陣列 ['8213'=>0, '8212'=>100, '8172'=>10008] 找出值最大的鍵名(8172)。
<?php
$hots = ['8213' => 0, '8212' => 100, '8172' => 10008];
$key = array_search(max($hots), $hots);
echo $key; // 8172
max($hots) 回傳最大值 10008array_search(10008, $hots) 回傳對應鍵名 8172| 情況 | 行為 | 對策 |
|---|---|---|
| 多個相同最大值 | 回傳第一個遇到的鍵名 | 若需全部,用 array_keys($arr, max($arr)) |
| 陣列為空 | max() 拋出 Warning、回傳 false | 先判斷 empty($arr) |
| 值為非純量(陣列/物件) | max() 比較規則複雜,不建議 | 轉為純量或自訂比較函式 |
<?php
$hots = ['a'=>10, 'b'=>50, 'c'=>30, 'd'=>50, 'e'=>5];
arsort($hots); // 保持鍵值關聯,值由大到小排序
$top3 = array_slice($hots, 0, 3, true);
print_r(array_keys($top3)); // ['b', 'd', 'c']
max() + array_search() 為兩次遍歷 O(2n),資料量極大(百萬級)可考慮單次遍歷手寫迴圈。