如何根据指定列值生成不同的数组?附示例
根据列值分组生成对应数组的实现方案
嘿,我懂你想要的效果——把那堆广告数据按照ad_category_id对应到第一个数组的分类名称下,生成按分类分组的新数组对吧?这事儿在PHP里其实挺简单的,我给你捋清楚怎么搞:
先明确需求
你手里有俩核心数组:
- 分类映射数组:键是
ad_category_id,值是分类名称(比如1 => Products) - 广告数据数组:每一项都是包含
ad_category_id字段的广告详情
要实现的就是:把广告数据里的每一条,根据它的ad_category_id,放到对应分类名称的数组里,最终得到一个以分类名称为键、对应广告列表为值的新数组。
核心实现思路
- 先把分类映射数组存好,它是我们的「分类对照表」
- 初始化一个结果数组,先给每个分类都创建空数组(保证所有分类都能在结果里出现,哪怕没对应广告)
- 遍历广告数据,把每条广告根据
ad_category_id匹配到对应的分类数组里
完整代码示例
// 你的分类映射数组 $categoryMap = [ 1 => 'Products', 3 => 'Services', 4 => 'External', 5 => 'Accessories' ]; // 你的广告数据数组(保留你提供的关键字段,其他字段可原样保留) $adData = [ [ 'ad_id' => 1, 'u_id' => 2, 'country_id' => 1, 'ur_id' => 3, 'ad_type' => 2, 'path' => '1508927659.jpg', 'thumbnail_image' => '', 'ad_category_id' => 1, 'inserted_date' => '2017-10-25 16:04:19', 'expire_date' => '2017-12-08 06:58:10', 'is_approve' => 1 ] ]; // 初始化结果数组,先给每个分类创建空数组 $result = []; foreach ($categoryMap as $catId => $catName) { $result[$catName] = []; } // 遍历广告数据,进行分组归类 foreach ($adData as $ad) { // 先检查当前广告的分类ID是否在映射表中存在,避免报错 if (isset($categoryMap[$ad['ad_category_id']])) { $targetCategory = $categoryMap[$ad['ad_category_id']]; $result[$targetCategory][] = $ad; } else { // 可选:处理不在分类映射中的广告,放到"未分类"组 if (!isset($result['Uncategorized'])) { $result['Uncategorized'] = []; } $result['Uncategorized'][] = $ad; } } // 输出最终结果 print_r($result);
代码说明
- 初始化结果数组时先遍历分类映射,确保所有分类都有对应的空数组,避免某个分类没有广告就从结果里消失
- 加入了分类ID的存在性检查,防止广告里出现不在映射表中的分类ID导致报错
- 可选的「未分类」处理,如果你的数据里不会有无效分类ID,可以直接删掉这部分代码
额外小提示
如果你的广告数据是从数据库查询来的,也可以考虑在SQL层面直接分组,比如JOIN分类表拿到分类名称后用GROUP BY,不过用PHP处理的好处是更灵活——比如可以随时调整分类映射,不用修改SQL语句。
内容的提问来源于stack exchange,提问作者Sandip Sanghani
相关产品推荐
相关产品推荐

