二维数组排序,数据库数据列表排序
之前遇见过若干次这样的需求,也做过笔记,就是没有发过博客,今天整理笔记,就顺便整理一下自己的处理函数吧。废话不多说,直接上代码:
/** * [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);
结果: