You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于不同列对MySQL表生成的PHP数组进行排序

嘿,我来帮你搞定这个多维数组的排序问题!你从MySQL拿到的这个二维数组,要按不同列排序其实很简单,PHP里的usort()函数配合自定义回调就能轻松实现。先把你的数组结构再明确下,方便咱们举例:

$items = [
    ['id' => 1, 'parent_ID' => 0],
    ['id' => 2, 'parent_ID' => 0],
    ['id' => 3, 'parent_ID' => 2],
    ['id' => 4, 'parent_ID' => 2],
    ['id' => 5, 'parent_ID' => 2],
    ['id' => 6, 'parent_ID' => 1],
    ['id' => 7, 'parent_ID' => 1],
    ['id' => 8, 'parent_ID' => 1],
    // 其他省略项...
];

1. 按单个列排序

按id升序/降序排序

PHP7+的太空船运算符<=>特别适合做这种比较,一行就能搞定逻辑:

// 升序排序
usort($items, function($a, $b) {
    return $a['id'] <=> $b['id'];
});

// 降序排序,只需要把$a和$b的位置调换
usort($items, function($a, $b) {
    return $b['id'] <=> $a['id'];
});

按parent_ID升序/降序排序

逻辑和上面完全一致,只是把比较的字段换成parent_ID:

// 升序
usort($items, function($a, $b) {
    return $a['parent_ID'] <=> $b['parent_ID'];
});

// 降序
usort($items, function($a, $b) {
    return $b['parent_ID'] <=> $a['parent_ID'];
});

2. 按多个列组合排序

如果需要更复杂的排序规则,比如先按parent_ID分组排序,同一分组下再按id排序,也很容易实现:

usort($items, function($a, $b) {
    // 先比较parent_ID
    $parentCompare = $a['parent_ID'] <=> $b['parent_ID'];
    // 如果parent_ID相同,再比较id
    if ($parentCompare === 0) {
        return $a['id'] <=> $b['id'];
    }
    return $parentCompare;
});

这样排序后,parent_ID为0的项会排在最前面,接着是parent_ID为1、2的分组,每个分组内部的id会从小到大排列。

兼容低版本PHP的写法

如果你的PHP版本低于7.0,没法用太空船运算符,可以手动判断大小:

// 按id升序的低版本写法
usort($items, function($a, $b) {
    if ($a['id'] == $b['id']) return 0;
    return $a['id'] > $b['id'] ? 1 : -1;
});

通用排序函数(可选)

要是你经常需要对不同字段排序,可以封装一个通用函数,灵活指定排序字段和方向:

function sortMultiArray(&$array, $column, $direction = 'asc') {
    usort($array, function($a, $b) use ($column, $direction) {
        $compare = $a[$column] <=> $b[$column];
        return $direction === 'desc' ? -$compare : $compare;
    });
}

// 调用示例:按parent_ID降序排序
sortMultiArray($items, 'parent_ID', 'desc');

内容的提问来源于stack exchange,提问作者Nibboro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:18:32