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

PHP中如何按Category、OnSale多键递归分组数组?

实现嵌套分组:先按Category,再按OnSale

嘿,你已经完成了第一步的分类分组,接下来的嵌套分组其实非常直观,咱们只需要在现有循环里多做一层键的判断和初始化就行啦!

修改后的代码

$result = array();
foreach ($data as $element) {
    // 提取当前元素的分类和是否在售状态
    $category = $element['Category'];
    $onSaleStatus = $element['OnSale'];
    
    // 1. 确保当前分类的数组存在,不存在就初始化空数组
    if (!isset($result[$category])) {
        $result[$category] = [];
    }
    // 2. 确保当前分类下对应OnSale状态的子数组存在,不存在就初始化
    if (!isset($result[$category][$onSaleStatus])) {
        $result[$category][$onSaleStatus] = [];
    }
    // 3. 将当前元素加入对应的嵌套分组中
    $result[$category][$onSaleStatus][] = $element;
}

代码解释

  • 首先把每个元素的Category和OnSale值单独提取出来,让逻辑更清晰;
  • 先检查当前分类是否已经在结果数组中,如果没有就先创建空数组,避免后续操作报错;
  • 接着检查该分类下对应的OnSale状态分组是否存在,同样不存在就初始化;
  • 最后把元素推入对应的嵌套位置,完成双层分组。

示例输出效果

处理后你的数组会变成类似这样的结构:

Array (
    [Toys] => Array (
        [false] => Array (
            [0] => Array (
                [Id] => 1
                [Name] => Toy Car
                [Category] => Toys
                [Price] => 2.99
                [OnSale] => false
            )
            // 其他属于Toys分类且OnSale为false的元素
        ),
        [true] => Array (
            // 属于Toys分类且OnSale为true的元素列表
        )
    ),
    [Electronics] => Array (
        [true] => Array (
            // 电子产品中在售的元素
        )
        // 依此类推...
    )
)

如果你的OnSale字段是字符串类型的"true"/"false"而不是布尔值,这段代码同样可以正常工作,因为我们直接用字段值作为数组键。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:18:01