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

如何根据指定列值生成不同的数组?附示例

根据列值分组生成对应数组的实现方案

嘿,我懂你想要的效果——把那堆广告数据按照ad_category_id对应到第一个数组的分类名称下,生成按分类分组的新数组对吧?这事儿在PHP里其实挺简单的,我给你捋清楚怎么搞:

先明确需求

你手里有俩核心数组:

  1. 分类映射数组:键是ad_category_id,值是分类名称(比如1 => Products)
  2. 广告数据数组:每一项都是包含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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:24:23