PHP:按值排序数组

PHP:按值排序数组,php,Php,我有一个数组,我想按key[min](0.2,0.86…)的值按desc顺序对它进行排序。 这是一个数组: Array ( [0] => Array ( [p1_first_res_avalue] => 0.72413793103448 [p1_rating_lang_avalue] => 0.2 [p1_ps_res_avalue] => 0.79310344827586

我有一个数组,我想按key
[min](0.2,0.86…)的值按desc顺序对它进行排序。
这是一个数组:

Array
(
    [0] => Array
        (
            [p1_first_res_avalue] => 0.72413793103448
            [p1_rating_lang_avalue] => 0.2
            [p1_ps_res_avalue] => 0.79310344827586      
            [pid] => 0
            [p1_discipline_e_avalue] => 0.77777777777778
            [p1_rating_lang] => 46
            [p1_first_res] => 59
            [p1_ps_res] => 57
            [p1_discipline_e] => 86
            [min] => 0.2
        )

    [1] => Array
        (
            [p1_discipline_e] => 81
            [p1_first_res] => 55
            [p1_rating_lang] => 38
            [p1_ps_res] => 48
            [p1_discipline_e_avalue] => 1
            [pid] => 1
            [p1_first_res_avalue] => 0.86206896551724
            [p1_rating_lang_avalue] => 1
            [p1_ps_res_avalue] => 1
            [min] => 0.86
        )

   [2] => Array
        (
            [p1_discipline_e] => 81
            [p1_first_res] => 55
            [p1_rating_lang] => 38
            [p1_ps_res] => 48
            [p1_discipline_e_avalue] => 1
            [pid] => 1
            [p1_first_res_avalue] => 0.86206896551724
            [p1_rating_lang_avalue] => 1
            [p1_ps_res_avalue] => 1
            [min] => 0.3
        )
...
)
我尝试使用uasort函数,但无法访问数组的
[min]
值进行比较。这就是我尝试的(
$res
是一个数组,需要排序):


请问,有什么办法解决这个问题吗?

为什么
uasort
不起作用?你的比较器就是

$f = function($a1, $a2) { return $a1['min'] < $a2['min'] ? -1 : 1; };
uasort($res, $f);
$f=函数($a1,$a2){return$a1['min']<$a2['min']?-1:1;};
uasort($res,$f);

您正在对每个子阵列进行排序-这些值中没有
min
,因此都将是0。在这种情况下,函数返回0,因此排序将不起任何作用。

您的问题似乎是试图将排序函数分别应用于数组的每个元素,而不是整个数组

而不是

foreach ($res as $k => $v) {
    uasort($res[$k], $f);
}
试试看


uasort($res,$f)

uasort可能会产生大量开销

如果要对数组进行排序,可以创建展开版本并使用asort

$flat = array();
foreach ($arr as $index => $item) {
    $flat[$index] = $item[$k];
}
asort($flat);

如果您想检查性能,可以使用微时间

很好地。。。我敢打赌,没有人期望西班牙宗教法庭有一个内置的解决方案,速度大约快25倍。请忘记用
u*sort
对2d数组进行排序,仅仅阅读手册没有任何价值

$flat = array();
foreach ($arr as $index => $item) {
    $flat[$index] = $item[$k];
}
asort($flat);

对于给定的情况,它只是:

array_multisort(array_column($res, 'min'), SORT_DESC, SORT_NUMERIC, $res);
更重要的是,它可以一次按多个列进行排序,很像按顺序排序,例如:

// ORDER BY `name` ASC, `price` DESC:
array_multisort(
    array_column($rows, 'name'), SORT_ASC,
    array_column($rows, 'price'), SORT_DESC, SORT_NUMERIC,
    $rows
);
您应该注意两件事:
array\u column
跳过没有请求键的行,但这对于从
SELECT
或类似方式获取的数据(请注意,
null
值未被忽略)和
array\u multisort
不保留数字键不是问题。然而,这两件事都可以很容易地解决,没有任何重大的开销


好奇的简单基准:

复制了几乎所有的结果…