2014-06-22 46 views
0

我正在閱讀有2列的文本文件。名稱,等級所以它看起來像這樣:排序2d數組的最佳方法Php

quxerm,6 
brock,5 
chris,15 

所以2D陣列看起來像[0] [0] = quxerm和[0] [1] = 6 [1] [0] =布洛克[1] [1] = 5

我已經把它們放到了像上面展示的二維數組中。

我需要按整數列降序排列這些值。我該如何分類?

+0

你想排序什麼?字符串或整數列? – CBergau

+0

我想按整數列排序。 – Brock

回答

0

改爲使用map,然後您可以使用所有功能相關的地圖,如this

-1

如果沒有重複的名稱,您可以簡單地爲鍵(名稱)分配排名,並在保留鍵時排序該排列。

$data["quxerm"] = 6; 
$data["brock"] = 5; 
$data["chris"] = 15; 
asort($data, SORT_NUMERIC); 
0

以陣列爲arr [i] [j]。

嘗試僅通過更改i的值進行比較。

for(int i=0;i<3;i++) for(int k=1;k<3;k++) if(arr[i][1]>arr[k][1]) max=i

,你可以檢索的最大: - arr[max][0]//name of max arr[max][1]//value of max

0
$sorted = array(); 
foreach($yourArray as $a){ 
$sorted[$a[1]] = $a[0]; 
} 
ksort($sorted); 
vardump($sorted); 
0

這應該由整列進行排序:

usort(
    $data, 
    function ($arrayOne, $arrayTwo) { 
     return ($arrayOne[1] < $arrayTwo[1]) ? -1 : 1; 
    } 
); 
1

@ CBergau的回答幾乎是完美的,但爲了將升序而不是降序。 爲了得到它,只需切換由usort調用的比較函數的返回值。有關更多信息,請參閱http://www.php.net/manual/en/function.usort.php

function cmp(array $a, array $b) { 
    return ($a[1] < $b[1]) ? 1 : -1; 
} 
usort($arr, 'cmp'); 

例子:http://codepad.org/QRTQLxTh

您還可以擴展比較功能,例如通過名稱在秩是使用STRCMP同一順序遞增。有關更多信息,請參閱http://www.php.net//manual/en/function.strcmp.php

function cmp(array $a, array $b) { 
    if ($a[1] == $b[1]) { 
     return strcmp($a[0], $b[0]); 
    } 
    return ($a[1] < $b[1]) ? 1 : -1; 
} 

例子:http://codepad.org/SeRTE3Ym

注意:我沒有足夠的聲譽還只是發表評論,@ CBergau的答案。