【问题标题】:Arranging a multi-dimensional array排列多维数组
【发布时间】:2011-05-20 01:39:34
【问题描述】:

我有一个看起来像这样的 PHP 数组:http://pastie.org/1346063(数组示例请参见 Pastie)

我想要做的是将该数组重新排序为另一个数组,该数组按每个数组的 [votes][POINTS] 子数组按数字降序排序。 [votes][POINTS] 值最高的数组将排在主数组的首位。

【问题讨论】:

    标签: php arrays multidimensional-array associative-array sorting


    【解决方案1】:

    使用usort()函数我们可以创建自己的比较函数:

    function cmp($a, $b) {
        if($a['votes']['POINTS'] == $b['votes']['POINTS']) {
            return 0;
        }
        return ($a['votes']['POINTS'] < $b['votes']['POINTS']) ? 1 : -1;
    }
    
    usort($array, 'cmp');
    

    结果:

    使用与您的结构相似的测试数据:

    Array
    (
        [0] => Array
            (
                [votes] => Array
                    (
                        [UP] => 1
                        [DOWN] => 0
                        [POINTS] => 5
                    )
    
            )
    
        [1] => Array
            (
                [votes] => Array
                    (
                        [UP] => 1
                        [DOWN] => 0
                        [POINTS] => 4
                    )
    
            )
    
        [2] => Array
            (
                [votes] => Array
                    (
                        [UP] => 1
                        [DOWN] => 0
                        [POINTS] => 2
                    )
    
            )
    
        [3] => Array
            (
                [votes] => Array
                    (
                        [UP] => 1
                        [DOWN] => 0
                        [POINTS] => 1
                    )
    
            )
    
    )
    

    【讨论】:

    • 你给我的那个功能好像不起作用。我不确定它是 CodeIgniter 还是函数中的某个东西。我尝试将该功能加载为插件,但似乎出错了。我不确定错误是什么,因为我的错误没有显示。只有在使用 cmp 调用 usort 函数时才会发生错误。
    • 函数本身有效。我对 CI 不是很熟悉,但是,你应该能够在你的模型中创建这个函数并简单地调用它。 CI 可能会默认记录所有错误,可能值得检查您的application/logs 或日志所在的任何位置。
    • @DevNull 确保不要将返回值从usort 分配回$arrayusort 改变了输入数组,它不返回排序后的数组。
    【解决方案2】:

    解决方案:-

    假设,您的数组存储在一个名为 $data

    的变量中

    您可以简单地使用array_multisort 对多维数组进行排序

    foreach ($data as $key => $row) {
        $points[$key]  = $row['votes']['points'];
    }
    
    // Sort the data with points descending
    array_multisort($points, SORT_DESC, $data);
    

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 2013-09-24
      • 2019-07-08
      • 2017-09-21
      • 1970-01-01
      • 1970-01-01
      • 2012-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多