首页 > php多维数组排序

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();

根据 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...

【热门文章】
【热门文章】