2

match_points这是我尝试按键(降序) 排序的数组示例:

让下面打印的数组被调用$my_arr

Array
(
    [0] => Array
        (
            [0] => Array
                (
                    [109] => 92
                    [match_points] => 50
                )

        )

    [1] => Array
        (
            [0] => Array
                (
                    [16] => 12
                    [match_points] => 62
                )

        )

    [2] => Array
        (
            [0] => Array
                (
                    [80] => 51
                    [match_points] => 63
                )

        )

)

我试过这个:

$a = usort($my_arr, 
    function (array $a, array $b) { 
        return $a["match_points"] - $b["match_points"]; 
    }
);

但我收到此警告消息:

未定义索引:match_points

这篇文章没有明确展示如何按特定键对 3 维数组进行排序,尽管可以在阅读该文章后推断出答案。

4

2 回答 2

3

问题是您的数组是 3 维的,但您的排序是针对二维数组构建的。

在 php 5.3+ 中,您可以使用带有闭包的 usort

 usort($array, function($a, $b){return $a[0]["match_points"] - $b[0]["match_points"];}); 

在 5.3 之前,您已经定义了一个 sorter 函数。

 function compMatchPoints($a, $b) {
      return $a[0]["match_points"] - $b[0]["match_points"];
 }
 usort($array, "compMatchPoints");
于 2013-07-22T15:07:29.383 回答
1

将所有 $data 变量更改为您的数组变量名称

 $sortkeys = array();
    foreach ($data as $row) {
        $sortkeys[] = $row[0]['match_points'];
    }

// 根据 $sortkeys 对 $data 进行排序,并使用 SORT_DESC 进行降序

array_multisort($sortKeys,SORT_DESC, $data, SORT_DESC);

echo "<pre>"
print_r($data);
die;
于 2019-03-07T06:56:56.870 回答