二维数组排序,数据库数据列表排序
之前遇见过若干次这样的需求,也做过笔记,就是没有发过博客,今天整理笔记,就顺便整理一下自己的处理函数吧。废话不多说,直接上代码:
/**
* [arr_sort 二维数组排序]
* @param array $array 需要处理的二维数组
* @param string $field 排序字段
* @param const $order 排序方式[SORT_DESC:倒序;SORT_ASC:正序]
* @param const $flag 排序标识[
* SORT_REGULAR - 将项目按照通常方法比较(不修改类型)
* SORT_NUMERIC - 按照数字大小比较
* SORT_STRING - 按照字符串比较
* SORT_LOCALE_STRING - 根据当前的本地化设置,按照字符串比较。 它会使用 locale 信息,可以通过 setlocale() 修改此信息。
* SORT_NATURAL - 以字符串的"自然排序",类似 natsort()
* SORT_FLAG_CASE - 可以组合 (按位或 OR) SORT_STRING 或者 SORT_NATURAL 大小写不敏感的方式排序字符串。
* ]
* @return bool 函数返回结果 true:排序成功;false:排序失败
*/
function arr_sort(array &$array, string $field, $order = SORT_ASC, $flag = SORT_REGULAR){
$arr_field = array_column($array,$field);
return array_multisort($arr_field, $order, $flag, $array);
}例:
$a = array(
array('name'=>'手机','brand'=>'诺基亚','price'=>1050),
array('name'=>'笔记本电脑','brand'=>'lenovo','price'=>4300),
array('name'=>'剃须刀','brand'=>'飞利浦','price'=>3100),
array('name'=>'跑步机','brand'=>'三和松石','price'=>4900),
array('name'=>'手表','brand'=>'卡西欧','price'=>960),
array('name'=>'液晶电视','brand'=>'索尼','price'=>6299),
array('name'=>'激光打印机','brand'=>'惠普','price'=>1200)
);
$r = arr_sort($a, 'price');
var_dump($r,$a);结果:
