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

2022-08-30 11:27:03
$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')   
);

有人能知道这样做吗?

谢谢


答案 1

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

array_unique($result, SORT_REGULAR);

旗帜的含义是:SORT_REGULAR

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

这就是你想要的。您希望在此处比较数组文档,并且不要将其类型更改为字符串(如果未设置参数,则字符串是默认值)。

array_unique做一个严格的比较(在PHP中),对于数组,这意味着:===

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

输出(演示):

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

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

答案 2

首先,您不能对此问题使用 plain,因为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
        )

)

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

如果您觉得这对你来说太神奇了,请查看此博客文章

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_arrayarray_unique