如何编写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); ?>
关键步骤说明
重组数组结构
原数组以公司为维度存储数据,我们需要转换为以办公室编号为核心维度:遍历每个公司的办公室条目,将公司名和对应金额映射到对应的办公室编号下,完成跨公司的分组。这是你之前代码缺失的核心环节——仅排序单个公司的办公室无法实现目标结构。正确排序办公室编号
- 使用
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
相关产品推荐
相关产品推荐

