PHP:检查多维数组中的重复值

PHP:检查多维数组中的重复值,php,arrays,duplicates,multidimensional-array,Php,Arrays,Duplicates,Multidimensional Array,我对多维数组有这个问题 给定以下多维数组: Array( [0] => Array("a", "b", "c") [1] => Array("x", "y", "z") [2] => Array("a", "b", "c") [3] => Array("a", "b", "c") [4] => Array("a", "x", "z") ) 我想检查它的值并找到重复项(即键0、2和3),只留下一个键值对删除其他键值对,结果如下: Array( [0] =&g

我对多维数组有这个问题

给定以下多维数组:

Array(
[0] => Array("a", "b", "c")
[1] => Array("x", "y", "z")
[2] => Array("a", "b", "c")
[3] => Array("a", "b", "c")
[4] => Array("a", "x", "z")
)
我想检查它的值并找到重复项(即键0、2和3),只留下一个键值对删除其他键值对,结果如下:

Array(
    [0] => Array("a", "b", "c")
    [1] => Array("x", "y", "z")
    [2] => Array("a", "x", "z")
    )

我该怎么做呢???

您只需使用in_array()即可

这会让你变得像

array(3) {
  [0] => array(3) {
    [0] => string(1) "a"
    [1] => string(1) "b"
    [2] => string(1) "c"
  }
  [1] => array(3) {
    [0] => string(1) "x"
    [1] => string(1) "y"
    [2] => string(1) "z"
  }
  [2] => array(3) {
    [0] => string(1) "a"
    [1] => string(1) "x"
    [2] => string(1) "z"
  }
}

这将使用以下方法从阵列中删除重复项:

这是一个更有效的解决方案(对数n+n而不是二次型),但它依赖于数组中所有元素之间的总顺序,而您可能没有(例如,如果内部数组有对象)


1比在_数组中使用
更有效。事实证明,
array\u unique
实际上使用了此算法,因此它也有相同的缺点。

您可以使用序列化来比较数组

var_dump(makeUnique($data));

function makeUnique(array $data)
{
    $serialized = array_map(create_function('$a', 'return serialize($a);'), $data);
    $unique = array_unique($serialized);
    return array_intersect_key($unique, $data);
}

玩得开心

要在多维数组上使用array_unique进行检查,您需要使用内爆将其展平

    $c=count($array)
    for($i=0;$i<$c;$i++)
    {
    $flattened=implode("~",$array[$i]);
    $newarray[$i]=$flattened;
     }
    if(count(array_unique($newarray)
    <count($newarray))
    {
    //returns true if $array contains duplicates
    //can also use array_unique on $newarray 
    //to remove   duplicates, then explode, 
    //to return to default state
    }
$c=count($array)

对于($i=0;$i-1),请查看文档。这将在比较之前将数组的值转换为字符串。@artifact:查看文档。我使用的是
SORT\u REGULAR
标志,它不使用字符串比较。根据php文档,“请注意,数组的唯一性()不适用于多维数组。”。它可以从给定的链接中看到。@enam我想这只是意味着
array\u unique
不能通过展平数组来找到唯一性。(顺便说一句,+1)think array\u unique不适用于多维数组。你能修复编码错误吗
?试试它会对你有帮助的。
$arr = ...;
$final = array();
sort($arr);
foreach ($arr as $el) {
   if (!isset($prev) || $el !== $prev)
       $final[] = $el
    $prev = $el;
}
var_dump(makeUnique($data));

function makeUnique(array $data)
{
    $serialized = array_map(create_function('$a', 'return serialize($a);'), $data);
    $unique = array_unique($serialized);
    return array_intersect_key($unique, $data);
}
    $c=count($array)
    for($i=0;$i<$c;$i++)
    {
    $flattened=implode("~",$array[$i]);
    $newarray[$i]=$flattened;
     }
    if(count(array_unique($newarray)
    <count($newarray))
    {
    //returns true if $array contains duplicates
    //can also use array_unique on $newarray 
    //to remove   duplicates, then explode, 
    //to return to default state
    }