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

PHP中按catalogo分组移除同组内重复rfc_inf_aval的方法

解决PHP多维数组按catalogo与rfc_inf_aval组合去重的问题

原始数组

$object = 
[
    [
        {"catalogo": "C400047", "rfc_inf_aval": "CIS981002NK4"},
        {"catalogo": "C140064","rfc_inf_aval": "MZT8501014S6"},
        {"catalogo": "C400047","rfc_inf_aval": "MZT8501014S6"},
        {"catalogo": "C400047","rfc_inf_aval": "CIS981002NK4"},
        {"catalogo": "C140064","rfc_inf_aval": "MZT8501014S6"},
        {"catalogo": "C140064","rfc_inf_aval": "MZT8501014S6"},
        {"catalogo": "C140064","rfc_inf_aval": "MZT8501014S6"},
        {"catalogo": "C140064","rfc_inf_aval": "CIS981002NK4"},   
    ],
];

需求说明

移除同一catalogo下重复的rfc_inf_aval条目,仅保留不同的catalogo与rfc_inf_aval组合,最终结果如下:

[
    [
        {"catalogo": "C400047","rfc_inf_aval": "CIS981002NK4"},
        {"catalogo": "C140064","rfc_inf_aval": "MZT8501014S6"},
        {"catalogo": "C400047","rfc_inf_aval": "MZT8501014S6"},
        {"catalogo": "C140064","rfc_inf_aval": "CIS981002NK4"},
    ],
]

错误尝试的代码

以下代码仅根据rfc_inf_aval单独去重,会误删不同catalogo下的相同rfc_inf_aval组合,不符合需求:

for ($i=0; $i < count($object); $i++) { 
    if(!in_array($object[$i]->rfc_inf_aval, $array1)){
        array_push($array1,  $object[$i]->rfc_inf_aval);
        array_push($array2,  $object[$i]);
    }
}   

正确实现方法

核心思路是基于catalogo和rfc_inf_aval的组合做唯一性判断,利用数组键的特性来去重:

如果数组元素是关联数组

// 取出内层数组
$originalItems = $object[0];
$uniqueKeys = [];
$result = [];

foreach ($originalItems as $item) {
    // 生成唯一组合键
    $combinationKey = $item['catalogo'] . '|' . $item['rfc_inf_aval'];
    if (!isset($uniqueKeys[$combinationKey])) {
        $uniqueKeys[$combinationKey] = true;
        $result[] = $item;
    }
}

// 还原为目标二维数组结构
$finalResult = [$result];
print_r($finalResult);

如果数组元素是对象

$originalItems = $object[0];
$uniqueKeys = [];
$result = [];

foreach ($originalItems as $item) {
    $combinationKey = $item->catalogo . '|' . $item->rfc_inf_aval;
    if (!isset($uniqueKeys[$combinationKey])) {
        $uniqueKeys[$combinationKey] = true;
        $result[] = $item;
    }
}

$finalResult = [$result];
print_r($finalResult);

这段代码会遍历数组,用catalogo和rfc_inf_aval拼接成唯一键,仅保留每个组合的首次出现,既去除同一catalogo下的重复rfc,又保留不同catalogo下的相同rfc组合。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 09:05:25