簡體   English   中英

排序2d陣列php的最佳方法

[英]Best way to sort 2d Array Php

我正在從具有2列的文本文件中讀取。 名稱,等級看起來像這樣:

quxerm,6
brock,5
chris,15

因此,二維數組看起來像[0] [0] = quxerm,[0] [1] = 6 [1] [0] =布羅克[1] [1] = 5

我已經像上面顯示的那樣將它們放入2d數組中。

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

@CBergau的答案幾乎是完美的,但是順序將是升序而不是降序。 要使其下降,只需切換由usort調用的compare函數的返回值即可。 有關更多信息,請參見http://www.php.net/manual/zh/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/zh/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的答案。

請改用map ,然后您可以使用所有函數親戚來映射此類

將數組作為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

您可以通過以下方式檢索max: 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;
    }
);

如果沒有重復的名稱,則可以簡單地為鍵(名稱)分配等級,並在保留鍵的同時對該數組進行排序。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM