如何从php中的关联数组中删除重复的条目

时间:2014-06-28 07:42:55

标签: php arrays

我的数组是

    Array
    (
        [0] => Array
            (
                [id] => 20
                [new_id] => 958
                [affiliate_id] => 33
           )
        [1] => Array
            (
                [id] => 21
                [new_id] => 959
                [affiliate_id] => 45
           )
         [2] => Array
            (
                [id] => 22
                [new_id] => 960
                [affiliate_id] => 23
           )
        [3] => Array
            (
                [id] => 23
                [new_id] => 961
                [affiliate_id] => 33
           )
    )

我想要数组

    Array
    (
        [0] => Array
            (
                [id] => 20
                [new_id] => 958
                [affiliate_id] => 33
           )
        [1] => Array
            (
                [id] => 21
                [new_id] => 959
                [affiliate_id] => 45
           )
         [2] => Array
            (
                [id] => 22
                [new_id] => 960
                [affiliate_id] => 23
           )
      )

我想删除affiliate_id的重复值。根据第一个数组,我得到affiliate_id的值为33两次。但我想要它一次。所以在我的第二个数组中(这将是我的答案)我删除它。

3 个答案:

答案 0 :(得分:1)

尝试类似这样的东西,不如array_一个衬里那么漂亮,但仍然是:

$existing_aff_ids = array();
$unique = array();
foreach ($affiliate as $aff) {
    if (!isset($existing_aff_ids[$aff['affiliate_id']])) {
        $unique[] = $aff;
        $existing_aff_ids[$aff['affiliate_id']] = 1;
    }
}

答案 1 :(得分:0)

这些不是重复值:

 1. $input = array_map("unserialize",
    array_unique(array_map("serialize", $data))

 2. array_values(array_unique($data))

这种情况都失败了,因为它存在唯一的id值,它要求所有值都相同才能将其视为重复。

解决方案:将使数组检查相应字段的值。

foreach($data as $key=>$val)
    {
        if (is_array($val))
        {
            $val2 = arrayUnique($val);
        }
        else
        {
            $val2 = $val;
            $newArray=array_unique($data);
            $newArray=deleteEmpty($newArray);
            break;
        }
        if (!empty($val2))
        {
            $newArray[$key] = $val2;
        }
    }

的print_r($ newArray);

答案 2 :(得分:0)

在答案中给出$affiliates,循环遍历数组并检查affiliate_id就行了

$unique_affiliates = array();
foreach($affiliates as $affiliate) {
    $affiliate_key = $affiliate['key'];

    /* Variant 1 */
    $unique_affiliates[$affiliate_key] = $affiliate;

    /* Variant 2 */
    if(!isset($unique_affiliates[$affiliate_key])) {
         $unique_affiliates[$affiliate_key] = $affiliate;
    }
}

$unique_affiliates中的所有条目都有唯一的affiliate_key。变体1将包含每个afffiliate_key的最后一次出现(如您的示例中所示),而变体2将添加任何affiliate_key的第一次出现,并忽略所有后续的出现。