首页 > 解决方案 > 从数组 + json 中删除重复项,array_unique 的问题

问题描述

我有类似的数组:

Array (
     [0]=>{"a":"b", "c":"d", "h":"e"}
     [1]=>{"a":"b", "f":"g"}
)

我如何在这里删除重复项?我正在尝试 array_unique,但它不起作用。

预期结果:

Array (
     [0]=>{"a":"b", "c":"d", "h":"e"}
     [1]=>{"f":"g"}
)

标签: phpjson

解决方案


您可以使用array_diff()unset()函数来做到这一点。但是,您需要首先解码此 JSON 值:

foreach($ar as $in => &$js){
    $ar[$in] = json_decode($js,true);
}

在此之后$ar有如下视图:

Array
(
    [0] => Array
        (
            [a] => b
            [c] => d
            [h] => e
        )

    [1] => Array
        (
            [a] => b
            [f] => g
        )

)

在这里您可以应用array_diff()功能:

$diff = array_diff($ar[1],array_diff($ar[1],$ar[0]));

它将从[1]索引中收集重复项[0]

Array
(
    [a] => b
)

现在您可以从索引中unset获取这些值:[1]

foreach($diff as $ind=>$uns){
    unset($ar[1][$ind]);
}

最后你可以改变 JSON 视图:

foreach($ar as $in=>&$js){
    $ar[$in] = json_encode($js);
}

结果将是:

Array
(
    [0] => {"a":"b","c":"d","h":"e"}
    [1] => {"f":"g"}
)

演示

如果输入元素是对象,则在第一步使用此循环:

foreach($ar as $in=>&$obj){
    $ar[$in] = (array)$obj;  
}

演示


推荐阅读