首页 话题 小组 问答 好文 用户 我的社区 域名交易

[函数]根据键值给二维数组排序(模仿sql语句排序)

发布于 2024-06-03 21:37:07
1
233


function arrayOrderBy(array &$arr, $order = null) {
     if (is_null($order)) {
         return $arr;
     }
     $orders = explode(',', $order);
     usort($arr, function($a, $b) use($orders) {
         $result = array();
         foreach ($orders as $value) {
             list($field, $sort) = array_map('trim', explode(' ', trim($value)));
             if (!(isset($a[$field]) && isset($b[$field]))) {
                 continue;
             }
             if (strcasecmp($sort, 'desc') === 0) {
                 $tmp = $a;
                 $a = $b;
                 $b = $tmp;
             }
             if (is_numeric($a[$field]) && is_numeric($b[$field]) ) {
                 $result[] = $a[$field] - $b[$field];
             } else {
                 $result[] = strcmp($a[$field], $b[$field]);
             }
         }
         return implode('', $result);
     });
     return $arr;
 }
评论 (1)
  • 道亮_(:з」∠)_

    道亮_(:з」∠)_ 作者 2024-06-03 21:37:28 1#

    demo


    $arr = array(
                array('id' => 1, 'age' => 1, 'sex' => 6, 'name' => 'a'),
                array('id' => 2, 'age' => 3, 'sex' => 1, 'name' => 'c'),
                array('id' => 3, 'age' => 3, 'sex' => 1, 'name' => 'b'),
                array('id' => 4, 'age' => 2, 'sex' => 1, 'name' => 'd'),
    );
    print_r(arrayOrderBy($arr, 'age asc,sex asc,name desc'));
站长交流