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

如何在PHP中对JSON相关数组去重,生成唯一分类数组

解决PHP对象数组去重问题:移除重复分类项

嘿,我看你现在遇到的问题是生成的分类数组里有重复项,需要把它处理成唯一的形式对吧?咱们来一步步修改代码搞定它!

你的原始问题场景

需求:将数组处理为无重复项的唯一形式,但当前代码生成的$session_activity_category数组包含重复分类。

原始代码:

$session_activity_category = array(); 
array_walk($search_venue, function($venue_b) use (&$session_activity_category) { 
    $categories = $this->users_model->search_categories_by_session($venue_b->activity_venue_id); 
    foreach ($categories as $category) { 
        $session_activity_category[] = $category; 
    } 
}); 
return $this->output 
    ->set_content_type('application/json') 
    ->set_status_header(200) 
    ->set_output(json_encode(array(
        'activity_category'=>$session_activity_category,
        'activity'=>$session_activity,
        'activity_session'=>$search_session,
        'activity_venue'=>$search_venue
    ),JSON_UNESCAPED_SLASHES) );

(重复项示意:标记重复分类的截图)

解决方案:用数组键唯一性实现可靠去重

因为你处理的是对象类型的数组,直接用PHP自带的array_unique()可能不太靠谱(它默认会把对象转成字符串再比较,很可能识别不出重复)。最稳妥的方式是利用每个分类的唯一标识(比如id字段)作为数组的键,这样重复的分类会自动被覆盖,完美实现去重。

修改后的代码如下:

$session_activity_category = array(); 
array_walk($search_venue, function($venue_b) use (&$session_activity_category) { 
    $categories = $this->users_model->search_categories_by_session($venue_b->activity_venue_id); 
    foreach ($categories as $category) {
        // 重点:用分类的唯一ID当数组键,相同ID的分类会自动覆盖,实现去重
        $session_activity_category[$category->id] = $category; 
    } 
});

// 可选操作:把关联数组转回索引数组,保持和原代码输出的数组结构一致
$session_activity_category = array_values($session_activity_category);

return $this->output 
    ->set_content_type('application/json') 
    ->set_status_header(200) 
    ->set_output(json_encode(array(
        'activity_category'=>$session_activity_category,
        'activity'=>$session_activity,
        'activity_session'=>$search_session,
        'activity_venue'=>$search_venue
    ),JSON_UNESCAPED_SLASHES) );

关键说明

  • 核心逻辑:PHP的数组键是唯一的,当你用分类的id作为键时,同一个分类的重复项会直接覆盖之前的条目,自然就去掉了重复。
  • 灵活调整:如果你的分类不是用id作为唯一标识,换成对应的字段就行(比如category_name、unique_code,只要能唯一区分每个分类就可以)。
  • 保持结构:最后用array_values()把关联数组转回索引数组,这样输出的JSON结构和你原来的代码完全一致,不会影响后续的使用。

这样修改后,$session_activity_category里就只会保留每个分类的唯一实例啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:40:29