06
2019
03

二维数组排序,数据库数据列表排序

二维数组排序,数据库数据列表排序

之前遇见过若干次这样的需求,也做过笔记,就是没有发过博客,今天整理笔记,就顺便整理一下自己的处理函数吧。废话不多说,直接上代码:


/**
 * [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);

结果:

image.png

« 上一篇 下一篇 »

公告:

跟着我一起每天进步一点点,让学习成为一种习惯!

公告:

跟着我一起每天进步一点点,让学习成为一种习惯!