PHP 多条件排序之 array_mutisort()

老牛浏览 450评论 0发表于

1. 前言

在 PHP 中根据单个条件排序(如按分数升序或降序)很简单,使用 sort()ksort() 都可以。如果需要实现多条件排序呢,我们可以通过内置函数 array_multisort() 来实现。

2. 需求说明

在游戏中有很多任务,每个任务有序号、任务名称、角色可接取的最低等级、前置任务 ID 等属性,现在需要按多个条件进行排序。首先,按角色可接取的最低等级排序,等级越低的越靠前;等级相同的情况下,再按序号排序,序号越低的越靠前;以此类推,最后按前置任务 ID 升序排序。

需要排序的数据如下:

php
$quests = [
    [
        'id' => 1,
        'name' => '神圣的守护者',
        'level' => 34,
        'pre_id' => 38,
    ],
    [
        'id' => 2,
        'name' => '天空之城开拓者',
        'level' => 25,
        'pre_id' => 367,
    ],
    .
    .
    .
];

3. 解决方案

php
.
.
.
foreach ($quests as $key => $quest) {
    $level[$key] = $quest['level'];
    $id[$key] = $quest['id'];
    $pre_id[$key] = $quest['pre_id'];
}

array_multisort($level, SORT_ASC, $id, SORT_ASC, $pre_id, SORT_ASC, $quests);

排序前:

ba5b24f2-289e-4e3c-be7b-c048f4e09943

排序后:

df50a807-a135-4116-865e-af311ab17bd8
点赞
收藏
暂无评论,快来发表评论吧~
私信
老牛@ilaoniu
老牛,俗称哞哞。单纯的九零后理工小青年。喜欢折腾,爱玩,爱音乐,爱游戏,爱电影,爱旅游...
最后活跃于