删除PHP中关联数组的重复元素

Posted

技术标签:

【中文标题】删除PHP中关联数组的重复元素【英文标题】:Remove duplicated elements of associative array in PHP 【发布时间】:2012-12-01 05:17:40 【问题描述】:
$result = array(
    0=>array('a'=>1,'b'=>'Hello'),
    1=>array('a'=>1,'b'=>'other'),
    2=>array('a'=>1,'b'=>'other'),
);

如果是重复删除它,结果如下:

$result = array(
    0=>array('a'=>1,'b'=>'Hello'),
    1=>array('a'=>1,'b'=>'other')   
);

有人知道这样做吗?

谢谢

【问题讨论】:

是什么让它重复 a= & b=other 或只是 b=other ... ab @Bada 谢谢 ***.com/questions/3767318/… 【参考方案1】:

无论其他人在这里提供什么,您都在寻找一个名为array_uniqueDocs 的函数。这里重要的是将第二个参数设置为SORT_REGULAR,然后工作就简单了:

array_unique($result, SORT_REGULAR);

SORT_REGULAR标志的含义是:

正常比较项目(不要更改类型)

这就是你想要的。您想在这里compare arraysDocs 并且不要将它们的类型更改为字符串(如果未设置参数,这将是默认值)。

array_unique 进行严格比较(php 中的===),对于数组,这意味着:

$a === $bTRUE 如果 $a 和 $b 具有相同顺序和相同类型的相同键/值对。

输出(Demo):

Array
(
    [0] => Array
        (
            [a] => 1
            [b] => Hello
        )

    [1] => Array
        (
            [a] => 1
            [b] => other
        )
)

【讨论】:

酷,我不知道在 al.l 上可以使用第二个参数 @DavidMüller:这本手册总是值得一看的;)至少如果它变得具体,我就是这样做的。您无法完全了解每个功能。 为我工作,谢谢 它似乎对我不起作用。我仍然得到重复的结果。 除此解决方案外,您还可以执行 array_values() 来重新设置您的数组键。只需执行 array_values(array_unique($result, SORT_REGULAR));【参考方案2】:

首先,你不能使用普通的array_unique 来解决这个问题,因为array_unique 在内部将数组项视为字符串,这就是为什么在使用array_unique 时会出现“无法将数组转换为字符串”的原因。

所以试试这个:

$result = array(
    0=>array('a'=>1,'b'=>'Hello'),
    1=>array('a'=>1,'b'=>'other'),
    2=>array('a'=>1,'b'=>'other')
);

$unique = array_map("unserialize", array_unique(array_map("serialize", $result)));

print_r($unique);

结果:

Array
(
    [0] => Array
        (
            [a] => 1
            [b] => Hello
        )

    [1] => Array
        (
            [a] => 1
            [b] => other
        )

)

序列化对于此类问题非常方便。

如果您觉得这对您来说魔力太大,请查看blog post

function array_multi_unique($multiArray)

  $uniqueArray = array();

  foreach($multiArray as $subArray)

    if(!in_array($subArray, $uniqueArray))
      $uniqueArray[] = $subArray;
    
  
  return $uniqueArray;


$unique = array_multi_unique($result);

print_r($unique);

具有讽刺意味的是,in_array 适用于数组,而 array_unique 不适用。

【讨论】:

嗯,实际上array_unique 很好。看我的回答:***.com/a/13860140/367456 如果您希望结果与输入格式相同(没有整数键),这就是答案。

以上是关于删除PHP中关联数组的重复元素的主要内容,如果未能解决你的问题,请参考以下文章

php判断数组是关联数组还是数值数组

CakePHP 中关联模型的名称

如果两个值匹配,则从 php 中的多维关联数组中删除重复项

php 删除数组重复的值

在关联数组中添加元素的数据结构[重复]

php数组元素值的修改和删除问题