2011-07-13 74 views
35

Tôi đang cố gắng giữ giá trị lớn nhất trong một mảng, trong khi vẫn giữ được nhãn mục. Tôi biết tôi có thể làm điều này bằng cách chạy sort(), nhưng nếu tôi làm như vậy tôi chỉ đơn giản là mất các nhãn - mà làm cho nó vô nghĩa cho những gì tôi cần. Đây là mảng:PHP Lấy giá trị cao nhất từ ​​mảng

array("a"=>1,"b"=>2,"c"=>4,"d"=>5); 

Bất kỳ ý tưởng nào?

Trả lời

106

Đừng sắp xếp mảng để lấy giá trị lớn nhất.

Lấy giá trị tối đa:

$value = max($array); 

Lấy chìa khóa tương ứng:

$key = array_search($value, $array); 
+0

cảm ơn bạn. nó đã làm việc. –

3

Bạn đang tìm kiếm asort()

+1

Nếu bạn don' t cần toàn bộ mảng được sắp xếp, sử dụng một trong những gazillion câu trả lời khác obvio usly;) Nhưng nhắc đến sắp xếp() khiến tôi nghĩ bạn đã nói sai câu hỏi của bạn. – Jacob

-4

Hãy thử sử dụng asort().

Từ tài liệu:

asort - hiệp hội Sắp xếp một mảng và duy trì chỉ số

Mô tả:

bool asort (array &$array [, int $sort_flags = SORT_REGULAR ]) 

Chức năng này sắp xếp một mảng như vậy mà chỉ số mảng duy trì tương quan của họ với các phần tử mảng mà chúng được liên kết với. Đây là được sử dụng chủ yếu khi sắp xếp các mảng liên kết trong đó phần tử thực tế là là có ý nghĩa.

+0

Bạn đang đề xuất gì khác? – Lomse

-2

asort() là con đường để đi:

$array = array("a"=>1,"b"=>2,"c"=>4,"d"=>5); 
asort($array); 
$highestValue  = end($array); 
$keyForHighestValue = key($array); 
0
// 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 
14

Nếu bạn chỉ muốn giá trị lớn nhất trong mảng sử dụng max chức năng. Điều này sẽ trả lại giá trị lớn nhất, mặc dù không phải là khóa tương ứng. Nó không thay đổi mảng ban đầu.

Nếu bạn quan tâm đến khóa sau đó bạn có thể làm

$key = array_search(max($array), $array) 

(Edited để bao gồm @ đề nghị binaryLV của)

+0

['array_search()'] (http://www.php.net/array_search) có thể được sử dụng để tìm khóa. – binaryLV

3

Bạn có thể sử dụng max() để nhận được giá trị lớn nhất, nhưng nó sẽ trở lại chỉ là một giá trị mà không có một chỉ số theo của mảng. Sau đó, bạn có thể sử dụng array_search() để tìm khóa theo.

$array = array("a"=>1,"b"=>2,"c"=>4,"d"=>5); 
$maxValue = max($array); 
$maxIndex = array_search(max($array), $array); 
var_dump($maxValue, $maxIndex); 

Output:

int 5 
string 'd' (length=1) 

Nếu có nhiều yếu tố có giá trị như nhau, bạn sẽ phải lặp qua mảng để có được tất cả các phím.

Rất khó để đề xuất điều gì đó tốt mà không biết sự cố. Tại sao bạn cần nó? Đầu vào là gì, đầu ra mong muốn là gì?

0
$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); 
0
<?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/>"; 
?> 
0

greatestValue => thử này rất dễ dàng

$a=array(10,20,52,105,56,89,96); 
$c=0; 
foreach($a as $b) 
{ 
if($b>$c) 
$c=$b; 

} 
echo $c; 
4
$a = array(10, 20, 52, 105, 56, 89, 96); 
$b = 0; 
foreach ($a as $key=>$val) { 
    if ($val > $b) { 
     $b = $val; 
    } 
} 
echo $b; 
0

Tìm số cao nhất của nó, bao gồm cả tiêu cực:

return max([abs(max($array)),abs(min($array))]); 
-1
$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"; 
Các vấn đề liên quan