我正在閱讀有2列的文本文件。名稱,等級所以它看起來像這樣:排序2d數組的最佳方法Php
quxerm,6
brock,5
chris,15
所以2D陣列看起來像[0] [0] = quxerm和[0] [1] = 6 [1] [0] =布洛克[1] [1] = 5
我已經把它們放到了像上面展示的二維數組中。
我需要按整數列降序排列這些值。我該如何分類?
我正在閱讀有2列的文本文件。名稱,等級所以它看起來像這樣:排序2d數組的最佳方法Php
quxerm,6
brock,5
chris,15
所以2D陣列看起來像[0] [0] = quxerm和[0] [1] = 6 [1] [0] =布洛克[1] [1] = 5
我已經把它們放到了像上面展示的二維數組中。
我需要按整數列降序排列這些值。我該如何分類?
如果沒有重複的名稱,您可以簡單地爲鍵(名稱)分配排名,並在保留鍵時排序該排列。
$data["quxerm"] = 6;
$data["brock"] = 5;
$data["chris"] = 15;
asort($data, SORT_NUMERIC);
以陣列爲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
$sorted = array();
foreach($yourArray as $a){
$sorted[$a[1]] = $a[0];
}
ksort($sorted);
vardump($sorted);
這應該由整列進行排序:
usort(
$data,
function ($arrayOne, $arrayTwo) {
return ($arrayOne[1] < $arrayTwo[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的答案。
你想排序什麼?字符串或整數列? – CBergau
我想按整數列排序。 – Brock