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
相关产品推荐
相关产品推荐

