如何用PHP中的键对三维数组进行排序

时间:2013-07-22 15:00:34

标签: php sorting multidimensional-array

这是我尝试按键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

This post未明确显示如何按特定键对3维数组进行排序, 虽然在阅读该帖子后,答案可以推断

2 个答案:

答案 0 :(得分:3)

问题是你的数组是3维的,但你的排序是为二维数组构建的。

在php 5.3+中你可以使用带闭包的usort

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

在5.3之前,您已定义了分拣机功能。

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

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