php 针对二维数组的某个字段值进行排序 array_multisort 函数的使用 超级好用

我把她从女孩变成了女人,她把我从男孩变成了,穷人。

 

eg: data 数据

 

然后在已score 字段的值 进行降序排序

 

  

 

补上对应的代码

public function test() {
        $data = [
            ['name'=>'刘一', 'sex'=>'男', 'score'=>99,],
            ['name'=>'陈二', 'sex'=>'男', 'score'=>68,],
            ['name'=>'张三', 'sex'=>'男', 'score'=>78,],
            ['name'=>'李四', 'sex'=>'男', 'score'=>82,],
            ['name'=>'王五', 'sex'=>'男', 'score'=>91,],
            ['name'=>'赵六', 'sex'=>'女', 'score'=>59,],
            ['name'=>'孙七', 'sex'=>'男', 'score'=>67,],
            ['name'=>'周八', 'sex'=>'女', 'score'=>72,],
            ['name'=>'吴九', 'sex'=>'男', 'score'=>64,],
        ];

        // 先进行获取对应的score值
        $scoreData = array_column($data, 'score');
        array_multisort($scoreData, SORT_DESC, $data);

        foreach ($data as $key => $val) {
            echo $val['name'].','.$val['sex'].','.$val['score'].PHP_EOL;
        }
    }

 

所以,最核心的代码就是 array_multisort  这个函数的应用,对应参数的传入,就实现了二维数组的排序,如果需要复杂的排序,就要去认真查看一下该函数的使用方法了。

注意:array_multisort   函数,如果传入的是 数字索引的数组,则会进行重新排序

 

正式函数,直接可以拿来用的

if( !function_exists('arrayToSort') ) {
    function arrayToSort($data = [], $key = '', $sort = 'desc') {
        if( !is_array($data) || empty($key) || empty($data) ) {
            return $data;
        } else if( count($data) == count($data, 1) ) {
            // 一维数组判断
            return $data;
        }

        // 判断是否存在
        if( !array_key_exists($key, current($data)) ) {
            return $data;
        }
        
        if( strtolower($sort) == 'desc' ) {
            $orderType = SORT_DESC;
        } else {
            $orderType = SORT_ASC;
        }

        $keyData = array_column($data, $key);
        array_multisort($keyData, $orderType, $data);
        return $data;
    }
}

 

posted @ 2021-09-02 08:48  方达达  阅读(156)  评论(0编辑  收藏  举报