php关联数组指定多个字段进行自定义排序

该文章介绍了一个PHP函数sortArrByManyField,用于根据多个字段对多维数组进行自定义排序。示例展示了如何按照score降序和class升序排序数组,并提到了array_multisort的排序类型参数,如SORT_NUMERIC和SORT_STRING。如果需要中文排序,可以借助第三方库如Pinyin进行拼音转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

php利用array_multisort实现多维数组指定多个字段进行自定义排序如下:

//多维数组指定多个字段排序
function sortArrByManyField(){
        $args = func_get_args();
        if(empty($args)){
            return null;
        }
        $arr = array_shift($args);
        if(!is_array($arr)){
            throw new Exception("不是数组");
        }
        foreach($args as $key => $field){
            if(is_string($field)){
                $temp = array();
                foreach($arr as $index=> $val){
                    $temp[$index] = $val[$field];
                }
                $args[$key] = $temp;
            }
        }
        $args[] = &$arr;//引用值
        call_user_func_array('array_multisort',$args);
        return array_pop($args);
}

//测试数组
$data[] = array('score' => 67, 'class' => 2);
$data[] = array('score' => 86, 'class' => 1);
$data[] = array('score' => 85, 'class' => 6);
$data[] = array('score' => 98, 'class' => 2);
$data[] = array('score' => 86, 'class' => 6);
$data[] = array('score' => 67, 'class' => 7);

// Pass the array, followed by the column names and sort flags
$sorted = sortArrByManyField($data, 'score', SORT_DESC, 'class', SORT_ASC);
?>

默认按数值排序,直接使用array_multisort函数的相关参数修改即可,附参数值:

SORT_REGULAR - 默认。把每一项按常规顺序排列(Standard ASCII,不改变类型)。
SORT_NUMERIC - 把每一项作为数字来处理。
SORT_STRING - 把每一项作为字符串来处理。
SORT_LOCALE_STRING - 把每一项作为字符串来处理,基于当前区域设置(可通过 setlocale() 进行更改)。
SORT_NATURAL - 把每一项作为字符串来处理,使用类似 natsort() 的自然排序。
SORT_FLAG_CASE - 可以结合(按位或)SORT_STRING 或 SORT_NATURAL 对字符串进行排序,不区分大小写。
如:

$myList= sortArrByManyField($list,'count',SORT_DESC,'level',SORT_ASC,'name',SORT_ASC,SORT_STRING);

如需中文排序用SORT_STRING 不准,可将数组中元素增加转化一项拼音,有现成的函数或第三方类库,我用的是https://github.com/overtrue/pinyin 直接composer

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值