【问题标题】:iSorting a multi-dimensional array based off an array value根据数组值对多维数组进行排序
【发布时间】:2012-04-19 13:59:09
【问题描述】:

我有以下基于数据库查询结果加载的数组

   while($row = mysql_fetch_array($result,MYSQL_ASSOC)) {   
            $response->rows[$i]['user_id']=$row['user_id'];
            # Row Data 
            $response->rows[$i]['cell']=array(
                                    $row['user_id'],
                                    $row['aff_code'],
                                    $row['lname'],
                                    $row['fname'],
                                    $new_comm,
                                    $mth_earn,
                                    $status_label);
           $i++;
        }

如何按 $new_comm,(数值)对这个数组进行排序?

$new_comm 和 $mth_earn 是根据对数据库的第二次调用计算得出的。

谢谢

【问题讨论】:

  • 对此有大约一千个不同的问题。使用搜索并查看右侧的“相关”部分。
  • 我建议在你的 sql 查询中对其进行排序,所以当你输出到 php 时 - 它已经排序了。

标签: php arrays sorting


【解决方案1】:

usort()

以下需要php 5.3,否则将匿名函数替换为通过create_function()制作的函数

usort($response->rows, function($a, $b){
    return $b['cell'][4] - $a['cell'][4];
});

或者使用巧妙实现的排序选项

usort($arr, function($a, $b) {
    $sortDescending = false;
    return (1 - 2*$sortDescending) * ($b['cell'][4] - $a['cell'][4]);
});

【讨论】:

  • 谢谢克里斯。这回答了我的问题,让我接近我的最终解决方案。我只需要添加选项来反转排序顺序,我假设这是通过将 - 替换为 +
  • 要翻转排序顺序,返回 $a['cell'][4] - $b['cell'][4];
  • OK 得到了答案。需要弄清楚 usort 是如何工作的以了解发生了什么。 usort($response->rows, function($a, $b){ //return ($a['cell'][4] > $b['cell'][4]) ? 1 : -1; / / 升序 //return ($a['cell'][4]
猜你喜欢
  • 1970-01-01
  • 2017-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多