【问题标题】:How i can sort 2 dimensional array? [duplicate]我如何对二维数组进行排序? [复制]
【发布时间】:2014-03-02 23:16:27
【问题描述】:

如何对以下数组进行排序

Array
(
    [17] => Array
        (
            [network_id] => 17
            [network_name] => M4N
            [total_transactions] => 4
            [commission] => 6.08
            [ordervalue] => 101
            [pending] => 0
            [approved] => 4
        )

    [18] => Array
        (
            [network_id] => 18
            [network_name] => Zanox
            [total_transactions] => 32
            [commission] => 33.7
            [ordervalue] => 1010.45
            [pending] => 0
            [approved] => 32
        )
)

我想通过以下排序选项对上述数组进行排序

  • 交易数量(从高到低)
  • 佣金(从高到低)
  • 订单价值(从高到低)

我正在尝试使用 array_multisort 对其进行排序,但到目前为止还没有成功

【问题讨论】:

标签: php arrays


【解决方案1】:

试试

function sort_custom_array($arr,$key,$sort='asc'){
 foreach($arr as &$r){
       $network_id[] = $r['network_id'];
       $network_name[] = $r['network_name'];
       $total_transactions[] = $r['total_transactions'];
       $commission[] = $r['commission'];
       $ordervalue[] = $r['ordervalue'];
       $pending[] = $r['pending'];
       $approved[] = $r['approved'];
 }
 $sort = ($sort=='asc')? constant('SORT_ASC') : constant('SORT_DESC');
 switch($key){
  case 'network_id': 
     array_multisort($network_id, $sort, $arr);
  break;
  case 'network_name': 
     array_multisort($network_name, SORT_NATURAL , $arr);
     if($sort==3){
       $arr = array_reverse($arr, true);
     }
  break;
  case 'total_transactions': 
     array_multisort($total_transactions, $sort, $arr);
  break;
  case 'commission': 
     array_multisort($commission, $sort, $arr);
  break;
  case 'ordervalue': 
     array_multisort($ordervalue, $sort, $arr);
  break;
  case 'pending': 
     array_multisort($pending, $sort, $arr);
  break;
  case 'approved': 
     array_multisort($approved, $sort, $arr);
  break;
 }
  return $arr;
}

现在您可以像下面这样对该数组中的字段进行排序:

$arr1 = sort_custom_array($arr,'ordervalue','desc');
echo "<pre>";
print_r($arr1);

查看演示here

【讨论】:

    【解决方案2】:

    你可以使用 usort();按用户定义的比较排序。

    http://php.net/manual/en/function.usort.php

    【讨论】:

      猜你喜欢
      • 2019-12-11
      • 1970-01-01
      • 2021-03-02
      • 1970-01-01
      • 1970-01-01
      • 2013-09-13
      • 2018-04-20
      • 2013-08-17
      • 2015-09-17
      相关资源
      最近更新 更多