首页 » 工作 » 方法 » 正文

PHP 二维数组 order by 多个字段排序

发布者:站点默认
2016/06/23 浏览数(1,539) 分类:方法 PHP 二维数组 order by 多个字段排序已关闭评论

源数据:

var data = '{
	"1417":{"name":"张军玲","score":"90","second":"437"},
	"1431":{"name":"苏海林","score":"70","second":"288"},
	"6869":{"name":"尚迎涛","score":"50","second":"66"},
	"6849":{"name":"刘巧锋","score":"70","second":"150"},
	"1120":{"name":"赵娜娜","score":"80","second":"330"}
}';

源数据预览:

scoresort_before

转换:

$data = json_decode($data,true);
$data = scoresort($data,'score desc,second asc,name desc');
$data = json_encode($data,JSON_UNESCAPED_UNICODE); // 不encode中文

转换后预览:

scoresort_after

转换后:

data = [
	{"name":"张军玲","score":"90","second":"437"},
	{"name":"赵娜娜","score":"80","second":"330"},
	{"name":"刘巧锋","score":"70","second":"150"},
	{"name":"苏海林","score":"70","second":"288"},
	{"name":"尚迎涛","score":"50","second":"66"}
];

转换函数:

/**
	积分排序
	注意:二维数组、使用了eval、关联(string)键名保持不变,但数字键名会被重新索引
 */
function scoresort($array, $orderStr='score desc,second asc'){
	$temp = explode(',', $orderStr);
	$order = array();
	foreach ($temp as $o) {
		$o = preg_split('/\s+/', trim($o));
		$o[1] = isset($o[1]) ? $o[1] : 'asc';
		$order[$o[0]] = $o[1];
	}
	$parm = array();
	foreach ($order as $k => $v) {
		${$k} = array();
		foreach ($array as $key => $value) {
			${$k}[$key] = $value[$k];
			// echo $value[$k]."\n";
		}
		$v = strtoupper($v);
		$parm[] = '$'."$k, SORT_$v";
	}
	$parm = implode(', ',$parm);
	eval('array_multisort('.$parm.', $array);');
	return $array;
}

官方示例:

array_multisort-database-demo

<完>

点击返回顶部
  1. 留言
  2. 联系方式