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

如何编写PHP函数按办公室编号对数组排序并分组?

实现按办公室编号排序并重组PHP数组的方案

完整实现代码

<?php
$Array = [
    [
        'Company' => 'Lotos',
        'offic' => [
            'N40' => '4000$', 
            'N32' => '1000$',
        ]
    ],
    [
        'Company' => 'Lump',
        'offic' => [
            'N32' => '7000$',
            'N1' =>  '3400$',
            'N40' => '1000$',
        ]
    ]
];

// 按办公室编号重组数据结构
$result = [];
foreach ($Array as $companyItem) {
    $companyName = $companyItem['Company'];
    foreach ($companyItem['offic'] as $officeId => $amount) {
        $result[$officeId][$companyName] = $amount;
    }
}

// 对办公室编号进行自然排序(按数字大小)
uksort($result, function($officeA, $officeB) {
    $numA = (int)str_replace('N', '', $officeA);
    $numB = (int)str_replace('N', '', $officeB);
    return $numA - $numB;
});

var_dump($result);
?>

关键步骤说明

  1. 重组数组结构
    原数组以公司为维度存储数据,我们需要转换为以办公室编号为核心维度:遍历每个公司的办公室条目,将公司名和对应金额映射到对应的办公室编号下,完成跨公司的分组。这是你之前代码缺失的核心环节——仅排序单个公司的办公室无法实现目标结构。

  2. 正确排序办公室编号

    • 使用uksort对重组后的数组按键(办公室编号)排序,注意uksort直接修改原数组,返回值是布尔值(表示排序是否成功),不能直接赋值给变量,这是你之前代码的错误点。
    • 由于办公室编号是N+数字格式,需要提取数字部分转为整数后比较,实现自然排序,避免字符串排序导致的N10排在N2前的问题。

输出结果

array(3) {
  ["N1"]=>
  array(1) {
    ["Lump"]=>
    string(5) "3400$"
  }
  ["N32"]=>
  array(2) {
    ["Lotos"]=>
    string(5) "1000$"
    ["Lump"]=>
    string(5) "7000$"
  }
  ["N40"]=>
  array(2) {
    ["Lotos"]=>
    string(5) "4000$"
    ["Lump"]=>
    string(5) "1000$"
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 19:07:36