我試圖從陣列得到第二高的價值,我只是想知道是否有可能做這樣的事情MAX -1或我絕對需要由表進行排序和第二高值MAX - 1 php ??它存在嗎?
private function max_key($array) {
foreach ($array as $key => $val) {
if ($val == max($array)) return $key;
}
}
我試圖從陣列得到第二高的價值,我只是想知道是否有可能做這樣的事情MAX -1或我絕對需要由表進行排序和第二高值MAX - 1 php ??它存在嗎?
private function max_key($array) {
foreach ($array as $key => $val) {
if ($val == max($array)) return $key;
}
}
$a = Array (1, 2, 40 , 100);
echo max($a) - 1; // definitely not 40
所以,是的,你需要rsort()
(built-in PHP function, sorts the array with highest values first),然後採取從列表中第2個值。
注意,例如array(1 , 10 , 5 , 10)
有第二個值==第一個值;如果你想要第二大的唯一值,首先運行它通過array_unique()
。
我不認爲你會找到一個MAX - 1功能。可能需要進行一種排序,然後在排序後的數組中進行第二個排序。
冒泡排序?泡泡分揀?爲什麼在地球上你推薦了一種效率最低的算法,並且重新發明了這個算法?另請參見:精手冊 - http://php.net/manual/en/function.sort.php – Piskvor 2012-01-10 14:43:30
你是對的,冒泡排序是一個壞主意 - 我更新我的回答 – jamesTheProgrammer 2012-01-10 14:46:21
最好的辦法是使用一個算法的qsort(更可讀代碼,更少調試)。如果你的數組/表格非常龐大(並且qsort可以爲你的代碼創建合理的性能問題),你可以執行一個線性搜索存儲在2個變量中的「max」和「max-1」元素:不是太貴要做,但你需要了解這項工作是否能給你帶來真正的優勢。
另一種形式給出,可以儘量保持直接在其源(SQL/DB表)來分類的陣列。
似乎沒有這種非標準的功能(這太具體的)。
您可以排序並獲得第二個值,但它的複雜性爲O(n log n)
。
有O(n) solution
function second_key($array){
$max=null;
$second = null;
foreach($array as $k => $v){
if(!isset($max) || $v > $array[$max]){
$second = $max;
$max = $k;
}
elseif(!isset($second) || $v > $array[$second]){
$second = $k;
}
}
return $second;
}
+1要走的路。我只是建議稍微改進一些代碼格式,例如爲了更好的可讀性,在運算符之前和之後添加空格,例如'>','='和'=>'。 – 2012-01-10 14:50:48
sort($array, SORT_NUMERIC);
echo $array[ count($array) - 2 ];
max($array) - 1
是行不通的。我會做這樣的事情:
$array = arsort($array);
return isset($array[1]) ? $array[1] : FALSE;
應該是相當'$ A [計數( $(a)-2]''sort()'之後。否則應該使用'rsort()'。 – Narf 2012-01-10 14:44:37
@Narf:很好,編輯。 – Piskvor 2012-01-10 14:45:58