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

PHP实现JSON解码后关联多维数组按age键升/降序排序

PHP按指定键对多维数组排序实现方案

首先明确解码前提:调用json_decode解析JSON时需要传入第二个参数true,才能得到关联数组格式的解析结果,示例解码代码如下:

$json = '[
  {
    "number": 1,
    "name": "masoud ahmadi",
    "age": 16,
    "school": "Amir kabir"
  },
  {
    "number": 2,
    "name": "mohammad hosseini",
    "age": 14,
    "school": "Andishe"
  },
  {
    "number": 3,
    "name": "Mohammad hosseini",
    "age": 14,
    "school": "Allame"
  },
  {
    "number": 4,
    "name": "ali akabr",
    "age": 16,
    "school": "Allame"
  }
]';
// 解码得到关联多维数组
$users = json_decode($json, true);

方法1:array_multisort 简洁实现(推荐)

先通过array_column提取所有age键的值组成排序依据数组,再和原数组一起传入排序函数,可快速切换升/降序规则:

// 提取所有age字段的值作为排序依据
$ages = array_column($users, 'age');

// 按age升序排序(年龄从小到大),排序后直接修改原$users数组
array_multisort($ages, SORT_ASC, $users);

// 若需要按age降序排序(年龄从大到小),把参数里的SORT_ASC替换为SORT_DESC即可
// array_multisort($ages, SORT_DESC, $users);

排序完成后直接用foreach遍历$users,得到的就是按age排序后的结果,可直接处理后续业务逻辑:

foreach ($users as $user) {
    // 自定义业务处理逻辑
    print_r($user);
}

方法2:usort 自定义比较逻辑实现

如果需要更灵活的排序规则(比如age相同时按number字段二次排序),可以用usort自定义比较函数,兼容性更强:

// 按age升序排序
usort($users, function($a, $b) {
    return $a['age'] - $b['age'];
});

// 按age降序排序
// usort($users, function($a, $b) {
//     return $b['age'] - $a['age'];
// });

// 扩展:age相同时按number升序二次排序
// usort($users, function($a, $b) {
//     if ($a['age'] == $b['age']) {
//         return $a['number'] - $b['number'];
//     }
//     return $a['age'] - $b['age'];
// });

注意事项

  • 上述两个排序函数都是直接修改原数组,不需要把返回值赋值给新变量,函数返回的布尔值仅代表排序操作是否执行成功
  • 如果调用json_decode时没有传入第二个参数true,得到的是对象数组而非关联数组,排序时取值要改为对象属性写法,例如$a->age、$b->age
  • 若排序后需要保留原数组的键值关联关系,把usort换成uasort即可
  • array_column函数要求PHP版本≥5.5,低于该版本的环境直接使用usort方案即可

按age升序排序后的结果参考

Array
(
    [0] => Array
        (
            [number] => 2
            [name] => mohammad hosseini
            [age] => 14
            [school] => Andishe
        )
    [1] => Array
        (
            [number] => 3
            [name] => Mohammad hosseini
            [age] => 14
            [school] => Allame
        )
    [2] => Array
        (
            [number] => 1
            [name] => masoud ahmadi
            [age] => 16
            [school] => Amir kabir
        )
    [3] => Array
        (
            [number] => 4
            [name] => ali akabr
            [age] => 16
            [school] => Allame
        )
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 01:12:31