PHP中如何按前两位字符分组并排序数组元素?
解决方案
没问题,我来帮你搞定这个PHP数组分组排序的需求!我们需要实现按元素前两位分组,同时根据元素的层级(长度)输出对应前缀,还要保证整体有序。
实现代码
<?php // 你的原始数组 $array = ["10", "1001","12", "1201","1002", "1202","120101", "120201","13"]; // 先对数组做字符串排序,确保元素按自然顺序排列 sort($array, SORT_STRING); // 按前两位字符分组,同时记录每个元素的层级 $groups = []; foreach ($array as $item) { $prefix = substr($item, 0, 2); // 计算层级:2位元素是0级,4位是1级,6位是2级 $level = (strlen($item) / 2) - 1; $groups[$prefix][] = [ 'value' => $item, 'level' => $level ]; } // 拼接输出结果,严格匹配你要的格式 $result = ''; foreach ($groups as $items) { foreach ($items as $item) { // 根据层级生成对应前缀 switch ($item['level']) { case 0: $prefixStr = '-'; break; case 1: $prefixStr = '--'; break; case 2: $prefixStr = '--- '; break; default: $prefixStr = ''; } $result .= $prefixStr . $item['value'] . ' '; } } // 输出最终结果(去掉末尾多余空格) echo trim($result); ?>
代码说明
- 排序:用
sort($array, SORT_STRING)对数组做字符串排序,这样元素会按自然顺序排列(比如10开头的排在12前面,1201排在120101前面),完全符合你的输出顺序要求。 - 分组:遍历数组,以每个元素的前两位字符作为分组键,同时计算元素的层级(根据长度:2位对应0级,4位对应1级,6位对应2级)。
- 输出拼接:遍历分组后的元素,根据层级匹配对应的前缀(0级用
-,1级用--,2级用---),最后拼接成你要的格式。
运行这段代码后,输出结果和你要求的完全一致:-10 --1001 --1002 -12 --1201 --- 120101 --1202 --- 120201 -13
如果需要调整前缀的格式(比如所有前缀后都加空格),只需要修改switch里的前缀字符串即可,非常灵活。
内容的提问来源于stack exchange,提问作者Daneshkavan
相关产品推荐
相关产品推荐

