在PHP中对二维数组进行排序

3

我有一个看起来像这样的数组:

Array
(

[90] => Array
    (
        [1056] => 44.91
        [1055] => 53.56
        [1054] => 108.88
        [1053] => 23.28

    ), 
[63] => Array
    (
        [1056] => 44.44
        [1055] => 53.16
        [1054] => 108.05

    ), 
[21] => Array
    (
        [1056] => 42.83
        [1055] => 51.36
        [1054] => 108.53
    )
);

两个键([x]和[y])都是我数据库中的ID,所以需要保持不变。[x]的顺序无关紧要,但我需要按照[y]的值对每个数组进行排序。

编辑: 我尝试过使用以下循环,但似乎没有起作用:

foreach($distance as $key=>$value) {
    asort($value,SORT_NUMERIC);
}

你可以使用 foreach 循环遍历外层数组,并使用 ksort 对每个内部数组进行排序。 - vichle
4个回答

3

使用 ksort(或 uksort)按照键名对数组进行排序。

更新:使用 asort(或 uasort)按值排序,保留键名。

更新 2:尝试这个

foreach($distance as &$value) {
    asort($value,SORT_NUMERIC);
}

我想按值(44.91, 53.96等)对其进行排序,而不是按键([1055],[1056]等)。 - Jarred
试一下我添加的循环。我认为问题在于 asort 改变了 $value 数组,但由于它不是按引用传递的,所以它没有将更改保存回原始数组。 - gen_Eric

3
像这样吗?
array_walk($array, 'asort');

2

使用 asort() 进行按值排序。它会维护索引关联。

在循环中,你需要通过引用传递 $value,所以你需要使用 &$value


0
 array_multisort($arrindex1, SORT_DESC, $arrindex2, SORT_DESC, $array);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接