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

PHP用foreach按字母数字排序分组展示分类并为空分组加自定义CSS方法

你可以按照以下步骤实现需求:

  • 先初始化完整的分组列表,包含#(对应数字开头分类)和A-Z的所有字母,确保所有分组都能正常输出,不会遗漏无分类的分组
  • 遍历子分类集合,按分类名首字符将分类归入对应分组:首字符为数字就归入#组,非数字则转成大写后归入对应字母组
  • 遍历初始化好的全部分组渲染页面结构,分组下有分类时输出子列表,无分类时给外层li加landing-pages-list-item-no-items自定义类

完整实现代码如下:

<?php
// 1. 初始化全部分组,先加#(对应数字开头的分类),再加入A-Z所有字母
$groups = [];
$groups['#'] = [];
for ($i = 65; $i <= 90; $i++) {
    $groups[chr($i)] = [];
}

// 2. 将子分类按首字符分配到对应分组
foreach ($subcategories as $subcat) {
    $catName = $subcat->getName();
    // 提取名称第一个字符,转大写,适配UTF-8编码避免中文/特殊字符乱码
    $firstChar = mb_strtoupper(mb_substr($catName, 0, 1, 'UTF-8'));
    // 判断首字符是否为数字
    if (is_numeric($firstChar)) {
        $groups['#'][] = $subcat;
    } else {
        // 非数字字符如果是A-Z范围内归入对应分组,其他特殊字符默认归入#组,可按需调整
        if (isset($groups[$firstChar])) {
            $groups[$firstChar][] = $subcat;
        } else {
            $groups['#'][] = $subcat;
        }
    }
}
?>

<!-- 3. 渲染最终的分组页面结构 -->
<ol class="landing-pages-list landing-pages-list-4-columns">
    <?php foreach ($groups as $groupKey => $groupItems): ?>
    <li class="landing-pages-list-item <?php if (empty($groupItems)) echo 'landing-pages-list-item-no-items' ?>">
        <h3 class="landing-pages-list-title"><?php echo $groupKey ?></h3>
        <?php if (!empty($groupItems)): ?>
        <ol class="landing-pages-list">
            <?php foreach ($groupItems as $subcat): ?>
            <li class="landing-pages-list">
                <a href="<?php echo $subcat->getUrl(); ?>" title="<?php echo $subcat->getName(); ?>">
                    <?php echo $subcat->getName(); ?>
                </a>
            </li>
            <?php endforeach; ?>
        </ol>
        <?php endif; ?>
    </li>
    <?php endforeach; ?>
</ol>

如果你的分类名包含非英文的特殊字符,可以根据业务需求调整字符判断逻辑,比如将非A-Z非数字的字符单独新增分组处理即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 16:36:03