排序2d阵列Php的最佳方法

时间:2014-06-22 08:07:30

标签: php sorting

我正在阅读包含2列的文本文件。名字,等级所以它看起来像这样:

quxerm,6
brock,5
chris,15

所以2d数组看起来像[0] [0] = quxerm和[0] [1] = 6 [1] [0] = brock [1] [1] = 5

我已将它们变成了二维数组,如上所示。

我需要通过整数列按降序对这些值进行排序。我该怎么办呢?

6 个答案:

答案 0 :(得分:1)

@ CBergau的答案几乎是完美的,但顺序将是升序而不是降序。 要使其降序,只需切换由usort调用的compare函数的返回值。有关详细信息,请参阅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的回答。

答案 1 :(得分:0)

改为使用map,然后您可以使用this等地图的所有函数亲戚。

答案 2 :(得分: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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

这应该按整数列排序:

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

答案 5 :(得分:-1)

如果没有重复的名称,您可以简单地为键(名称)指定等级,并在保留键的同时对该数组进行排序。

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