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

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);
?>

代码说明

  1. 排序:用sort($array, SORT_STRING)对数组做字符串排序,这样元素会按自然顺序排列(比如10开头的排在12前面,1201排在120101前面),完全符合你的输出顺序要求。
  2. 分组:遍历数组,以每个元素的前两位字符作为分组键,同时计算元素的层级(根据长度:2位对应0级,4位对应1级,6位对应2级)。
  3. 输出拼接:遍历分组后的元素,根据层级匹配对应的前缀(0级用-,1级用--,2级用--- ),最后拼接成你要的格式。

运行这段代码后,输出结果和你要求的完全一致:
-10 --1001 --1002 -12 --1201 --- 120101 --1202 --- 120201 -13

如果需要调整前缀的格式(比如所有前缀后都加空格),只需要修改switch里的前缀字符串即可,非常灵活。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:32:06