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

如何使用PHP的array_multisort对多维数组排序得到指定结果

错误原因

  • 原代码的array_multisort仅传入了排序依据数组,未传入需要被排序的目标数据,原$arr不会被修改
  • 本次排序的核心目标是调整t1/t2/t3/t4/t5这组键的顺序,而非外层两个子数组的顺序,直接对原$arr排序不符合需求
  • 最终输出需要提取sum字段作为直接值,原嵌套结构需要做转换

正确实现代码

<?php
$arr = [
    [
        "t1" => ["sum" => 3],
        "t2" => ["sum" => 8],
        "t3" => ["sum" => 3],
        "t4" => ["sum" => 1],
        "t5" => ["sum" => 8]
    ],
    [
        "t1" => ["sum" => 6],
        "t2" => ["sum" => 2],
        "t3" => ["sum" => 4],
        "t4" => ["sum" => 4],
        "t5" => ["sum" => 1]
    ]
];

// 提取所有待排序的键
$keys = array_keys($arr[0]);
// 构造两个排序维度的数组
$sortByFirstSum = [];
$sortBySecondSum = [];
foreach ($keys as $key) {
    $sortByFirstSum[] = $arr[0][$key]['sum'];
    $sortBySecondSum[] = $arr[1][$key]['sum'];
}

// 按规则排序,同时调整键的顺序
array_multisort(
    $sortByFirstSum, SORT_DESC, SORT_NUMERIC,
    $sortBySecondSum, SORT_DESC, SORT_NUMERIC,
    $keys
);

// 按排序后的键构造目标结构
$result = [];
foreach ($keys as $key) {
    $result[0][$key] = $arr[0][$key]['sum'];
    $result[1][$key] = $arr[1][$key]['sum'];
}

print_r($result);

输出结果

Array
(
    [0] => Array
        (
            [t2] => 8
            [t5] => 8
            [t1] => 3
            [t3] => 3
            [t4] => 1
        )

    [1] => Array
        (
            [t2] => 2
            [t5] => 1
            [t1] => 6
            [t3] => 4
            [t4] => 4
        )

)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 14:36:01