2012-03-30 40 views
4

我想從我的數組拿到三和highes價值獲取三個最高值,但應適當地鍵也進行排序。從陣列

我有這樣的代碼:

<?php 
$a = array(130, 1805, 1337); 
arsort($a); 
print_r($a); 
?> 

上述輸出如下:

Array 
(
    [1] => 1805 
    [2] => 1337 
    [0] => 130 
) 

其工作正常,但我想它additionaly從最高到最低的按鍵排序值。

實施例:

Array 
(
    [2] => 1805 
    [1] => 1337 
    [0] => 130 
) 

需要明確的是:我想它是由鍵排序:陣列密鑰號2將始終用於最高值,陣列密鑰號碼0將被一直使用爲最低值。

我該怎麼做?

/讓我知道,如果你不明白的東西。

+0

難道這裏任何通過正確價值***和*鍵排序的答案* *? – 2012-03-30 21:07:13

回答

7
rsort($array); 
$top3 = array_reverse(array_slice($array, 0, 3)); 
+0

爲@Cyclone只是注意,如果你使用'array_slice'作爲@deceze指出,它只會返回前3的值。如果您想影響_all_值,請將其忽略。 – hohner 2012-03-30 01:15:14

+0

那麼,*三個最高值*是什麼OP是要求... – deceze 2012-03-30 01:16:09

+2

而受downvoter評論就好了。 – deceze 2012-03-30 01:17:29

2

你應該使用array_reverse這一點。

<?php 
$a = array(130, 1805, 1337); 
arsort($a); 
print_r(array_reverse($a)); 
?> 

容易被$a[0]$a[1]$[2]訪問讓你的最高值。

1
$a = array(130, 1805, 1337); 
arsort($a); 
array_reverse($a); 

將產生:

Array 
(
    [2] => 1807 
    [1] => 1337 
    [0] => 130 
) 

你可以找到更多關於它here

+1

只需注意:'array_reverse()'不會更改原始數組,它會返回反轉的數組,因此您必須將其捕獲到變量中或者它沒有用處。 – animuson 2012-03-30 01:22:46

+0

不起作用(http://ideone.com/LUERG)? – 2012-03-30 20:58:56

0

我會嘗試:

<?php 
$a = array(130, 1805, 1337); 
arsort($a); 
$a = array_reverse($a); 
0

我不能讓你與任何已經發布的答案中描述的輸出(通過IDEOne.com測試)。


這裏是我的解決方案(demo):

$a = array(130, 1805, 1337); 

$keys = array_keys($a); rsort($keys, SORT_NUMERIC); 
$values = array_values($a); rsort($values, SORT_NUMERIC); 

$a = array_combine(array_slice($keys, 0, 3), array_slice($values, 0, 3)); 

print_r($a); 

輸出:

Array 
(
    [2] => 1805 
    [1] => 1337 
    [0] => 130 
) 
0
<?php 

$array = array(130, 1805, 1337); 
sort($array); 
for ($i=0; $i <= count($array)-1; $i++) 

     $arr[]=$array[$i]; 
     print_r($arr); 

?>