PHP 对二维数组指定的 key 排序
序言
项目中需要对查询结果进行排序,由于查询结果是分两次,无法使用mysql的orderBy排序,网站找了点资料,这里稍微汇总下,
开始
我们先来看一个函数array_multisort
,官方文档给出的解释是:
对多个数组或多维数组进行排序,排序结果是所有的数组都按第一个数组的顺序进行排列。
两个数组的元素个数必须相同,不然就会出现一个警告信息:
Warning: array_multisort() [function.array-multisort]: Array sizes are inconsistent in …
我们使用这个函数排序结果是所有的数组都按第一个数组的顺序进行排列
特性对二位数组进行排序。
下面是一个小demo:
array (size=5)
0 =>
array (size=6)
'title' => string '搞笑' (length=6)
'recommend' => string '0' (length=1)
'tagCount' => string '0' (length=1)
'useCount' => string '0' (length=1)
'userMarkCount' => int 0
1 =>
array (size=6)
'title' => string '心理专家' (length=12)
'recommend' => string '1' (length=1)
'tagCount' => string '0' (length=1)
'useCount' => string '0' (length=1)
'userMarkCount' => int 0
2 =>
array (size=6)
'title' => string '黄段子' (length=9)
'recommend' => string '0' (length=1)
'tagCount' => string '3' (length=1)
'useCount' => string '19' (length=2)
'userMarkCount' => int 13
3 =>
array (size=6)
'title' => string ' 不一样的搞笑' (length=19)
'recommend' => string '1' (length=1)
'tagCount' => string '0' (length=1)
'useCount' => string '0' (length=1)
'userMarkCount' => int 0
4 =>
array (size=6)
'title' => string 'cocoyo' (length=6)
'recommend' => string '0' (length=1)
'tagCount' => string '0' (length=1)
'useCount' => string '0' (length=1)
'userMarkCount' => int 0
我们上面定义一个二位数组,然后指定useCount
进行排序:
$arrSort = [];
$condition = ['field' => 'useCount', 'direction' => 'SORT_DESC']; //SORT_DESC 倒序 SORT_ASC正序
foreach ($array as $key => $value) {
foreach ($value as $k => $v) {
$arrSort[$k][$key] = $v;
}
}
array_multisort($arrSort[$condition['field']], $condition['direction'], $array);
我们再来看下排序结果:
array (size=5)
0 =>
array (size=6)
'title' => string '黄段子' (length=9)
'recommend' => string '0' (length=1)
'tagCount' => string '3' (length=1)
'useCount' => string '19' (length=2)
'userMarkCount' => int 13
1 =>
array (size=6)
'title' => string '搞笑' (length=6)
'recommend' => string '0' (length=1)
'tagCount' => string '0' (length=1)
'useCount' => string '0' (length=1)
'userMarkCount' => int 0
2 =>
array (size=6)
'title' => string '心理专家' (length=12)
'recommend' => string '1' (length=1)
'tagCount' => string '0' (length=1)
'useCount' => string '0' (length=1)
'userMarkCount' => int 0
3 =>
array (size=6)
'title' => string ' 不一样的搞笑' (length=19)
'recommend' => string '1' (length=1)
'tagCount' => string '0' (length=1)
'useCount' => string '0' (length=1)
'userMarkCount' => int 0
4 =>
array (size=6)
'title' => string 'cocoyo' (length=6)
'recommend' => string '0' (length=1)
'tagCount' => string '0' (length=1)
'useCount' => string '0' (length=1)
'userMarkCount' => int 0
至此,排序就成功了,不过套用了两层foreach
,相信一定还有更优的排序方法,有更优的排序方案的小伙伴欢迎留言:grin:。
laravel 中有个帮助函数可以实现:http://learnku.com/docs/laravel/5.3/collec...
@leung0826 感谢!不过我用的是tp框架,一直想投入laravel的怀抱:joy:
usort
@coodeer 感谢提示!unsort确实可以:+1:
@quickgreen yes! 7.0写法