Я пытаюсь получить наибольшее значение в массиве, сохраняя при этом метки элементов. Я знаю, что могу это сделать, запустив sort (), но если я это сделаю, я просто потеряю ярлыки, что делает его бессмысленным для того, что мне нужно. Вот массив:
array("a"=>1,"b"=>2,"c"=>4,"d"=>5);
Есть идеи?
Не сортируйте массив, чтобы получить наибольшее значение.
Получите максимальное значение:
$value = max($array);
Получите соответствующий ключ:
$key = array_search($value, $array);
Если вы просто хотите, чтобы наибольшее значение в массиве использовало функцию max . Это вернет наибольшее значение, хотя не соответствующий ключ. Он не меняет исходный массив.
Если вам нужен ключ, который вы могли бы сделать
$key = array_search(max($array), $array)
(Отредактировано для включения предложения @ binaryLV)
$a = array(10, 20, 52, 105, 56, 89, 96); $b = 0; foreach ($a as $key=>$val) { if ($val > $b) { $b = $val; } } echo $b;
Вы ищете asort ()
Вы можете использовать max () для получения наибольшего значения, но оно вернет только значение без соответствующего индекса массива. Затем вы можете использовать array_search (), чтобы найти соответствующий ключ.
$array = array("a"=>1,"b"=>2,"c"=>4,"d"=>5); $maxValue = max($array); $maxIndex = array_search(max($array), $array); var_dump($maxValue, $maxIndex);
Вывод:
int 5 string 'd' (length=1)
Если имеется несколько элементов с одинаковым значением, вам придется перебирать массив, чтобы получить все ключи.
Трудно предложить что-то хорошее, не зная проблемы. Зачем тебе это? Что такое ввод, какой желаемый результат?
// assuming positive numbers $highest_key; $highest_value = 0; foreach ($array as $key => $value) { if ($value > $highest_value) { $highest_key = $key; } } // $highest_key holds the highest value
$abc=array("a"=>1,"b"=>2,"c"=>4,"e"=>7,"d"=>5); /*program to find max value*/ $lagest = array(); $i=0; foreach($abc as $key=>$a) { if($i==0) $b=$a; if($b<$a) { $b=$a; $k=$key; } $i++; } $lagest[$k]=$b; print_r($lagest);
<?php $array = array("a"=>1,"b"=>2,"c"=>4,"d"=>5); foreach ($array as $key => $value) { if ($value >= $max) $max = $key; } echo " The array in largest number :".$max."<br/>"; ?>
Вам нужно использовать ksort (array ("a" => 1, "b" => 2, "c" => 4, "d" => 5)); для получения дополнительной информации: http://www.w3schools.com/php/php_arrays_sort.asp
greatValue => попробуйте это очень легко
$a=array(10,20,52,105,56,89,96); $c=0; foreach($a as $b) { if($b>$c) $c=$b; } echo $c;
Найти наибольшее число, включая отрицательные:
return max([abs(max($array)),abs(min($array))]);
$ee = array('a' => 50, 'b' => 25, 'c' => 5, 'd' => 80, 'e' => 40, 'f' => 152, 'g' => 45, 'h' => 28); $Acurr = ''; $Amax = 0; foreach($ee as $key => $value) { $Acurr = $value; if($Acurr >= $Amax) { $Amax = $Acurr; } } echo "greatest number is $Amax";
asort()
– это путь:
$array = array("a"=>1,"b"=>2,"c"=>4,"d"=>5); asort($array); $highestValue = end($array); $keyForHighestValue = key($array);
Попробуйте использовать asort()
.
Из документации:
asort – сортировать массив и поддерживать ассоциацию индекса
Описание:
bool asort ( array &$array [, int $sort_flags = SORT_REGULAR ] )
Эта функция сортирует массив таким образом, что индексы массива сохраняют свою корреляцию с элементами массива, с которыми они связаны. Это используется в основном при сортировке ассоциативных массивов, где фактический порядок элементов значителен.