php多维数组排序
高洛峰
高洛峰 2017-04-11 09:52:57
[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();
高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回复(5)
PHP中文网
$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;
}
PHPz

建议看看 array_multisort , 用这个array_multisort可以很方便的写出一个自己更方便使用的multi_array_sort

大家讲道理

array_multisort
http://php.net/manual/zh/func...

大家讲道理

根据 array_multisort 自定义一个排序

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号