客户需求:把项目按照名称的前两位数字进行排序,项目名称示例:Ⅲ-1-1)-①-正式发文(Ⅲ-1-1)-①-正式发文),按照第一位的罗马数字和第二位的阿拉伯数字进行排序,先使用explode对名称进行分割,分割成数组后的前两位,分别存入两个数组内,使用array_multisort进行排序即可。
static public function upSort($data){
$levelList = Db::name(CConstanst::TB_CIVILIZED_LEVEL)
->order('sort asc,id asc')
->select();
if(count$levelList) <= 0){
return $levelList;
}
foreach ($levelList as $key=>$value){
$tempNameArr = explode('-',$value['name']);
$sortTemp1[$key] = $tempNameArr[0];
$sortTemp2[$key] = $tempNameArr[1];
}
array_multisort($sortTemp1,SORT_ASC,$sortTemp2,SORT_ASC,$levelList);
foreach ($levelList as $key=>$value){
Db::name(CConstanst::TB_CIVILIZED_LEVEL)
->where(['id'=>$value['id']])
->update(['sort'=>$key+1]);
}
}
核心函数是array_multisort,
简单使用如下
static public function sortByTwoField($data){
if(count($data) <= 0){
return $data;
}
foreach ($data as $key => $value){
$price[$key] = $value['price'];
$num[$key] = $value['num'];
}
array_multisort($price, SORT_DESC, $num, SORT_DESC, $data);
return $data;
}
二维数组数组按照多个字段排序
最新推荐文章于 2024-07-24 23:00:08 发布