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;
}
}