需求:按照age升序或降序排序
array(
'0'=>array('age'=>50,'name'=>'kobe'),
'1'=>array('age'=>60,'name'=>'tom'),
'2'=>array('age'=>40,'name'=>'jack')
)
结果:
array(
'2'=>array('age'=>40,'name'=>'jack')
'0'=>array('age'=>50,'name'=>'kobe'),
'1'=>array('age'=>60,'name'=>'tom'),
)
问:有没有现成的php函数能解决这个问题的?
解决:
想必是没这么牛逼的函数,找一个
function sortArrByField(&$array, $field, $desc = false){
$fieldArr = array();
foreach ($array as $k => $v) {
$fieldArr[$k] = $v[$field];
}
$sort = $desc == false ? SORT_ASC : SORT_DESC;
array_multisort($fieldArr, $sort, $array);
}
$arr = array(
'0'=>array('age'=>50,'name'=>'kobe'),
'1'=>array('age'=>60,'name'=>'tom'),
'2'=>array('age'=>40,'name'=>'jack')
);
sortArrByField(&$arr,'age',true);
var_dump($arr);exit();
根据 array_multisort 自定义一个排序
$data = [
['age' => 50, 'name' => 'kobe'],
['age' => 60, 'name' => 'tom'],
['age' => 40, 'name' => 'jack']
];
usort($data, function ($a, $b)
{
return $a['age'] > $b['age'];
});
print_r($data);
嗯,二维数组排序直接用array_multisort
行不同的,我给你我之前用过的一个方法你参考试试
/**
* 根据键值排序
* param $list 排序数据
* param $key 排序键值
* param int $sort 排序方式
*/
function arraySort($list, $key, $sort=SORT_DESC){
if(is_array($list)){
foreach ($list as $array){
if(is_array($array)){
$keyArray[] = $array[$key];
}else{
return false;
}
}
}else{
return false;
}
array_multisort($keyArray, $sort, $list);
return $list;
}
建议看看 array_multisort , 用这个array_multisort可以很方便的写出一个自己更方便使用的multi_array_sort
array_multisort
http://php.net/manual/zh/func...