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

PHP:如何按嵌套数组中Client的Name字段降序排序?

问题:嵌套数组中按子数组字段排序

原数组结构:

$array = [
    [
        'project_id' => 1,
        'Client' => [
            ['Name' => 'Franco', 'Amount' => 1000.00],
            ['Name' => 'Allan', 'Amount' => 1000.00],
            ['Name' => 'Booby', 'Amount' => 1000.00]
        ],
    ],
];

需求:对Client数组内的元素按Name字段降序排序。

为什么你的代码没生效?

你之前的代码是对外层数组(包含project_id的那个数组)进行排序,但外层数组只有1个元素,排序没有意义。真正需要排序的是外层元素里的Client子数组。


解决方案1:使用usort

直接定位到Client数组,用自定义回调实现排序:

// 指向需要排序的Client数组
$clients = &$array[0]['Client'];

usort($clients, function($a, $b) {
    // 字符串降序比较:用b的Name与a的Name对比
    return strcmp($b['Name'], $a['Name']);
});

// 输出结果
print_r($array);

执行后Client数组会变为:

[
    ['Name' => 'Franco', 'Amount' => 1000.00],
    ['Name' => 'Booby', 'Amount' => 1000.00],
    ['Name' => 'Allan', 'Amount' => 1000.00]
]

解决方案2:使用array_multisort

先提取Name字段作为排序键,再关联排序原数组:

// 提取所有Client的Name字段
$names = array_column($array[0]['Client'], 'Name');

// 按Name降序排序,同时同步排序Client数组
array_multisort($names, SORT_DESC, SORT_STRING, $array[0]['Client']);

print_r($array);

如果外层有多个项目(多project)

如果数组包含多个project_id元素,循环处理每个项目的Client即可:

foreach ($array as &$project) {
    usort($project['Client'], function($a, $b) {
        return strcmp($b['Name'], $a['Name']);
    });
}
unset($project); // 释放引用避免后续操作异常

内容的提问来源于stack exchange,提问作者Not a Pro

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 19:08:22