php多维数组排序

需求:按照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();
回复
阅读 2.7k
5 个回答
$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 自定义一个排序

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏