2015-03-19 119 views
4

我需要检查二维数组($ arr)是否有重复项(顺序无关紧要)并将它们放入一个干净的数组中。PHP在多维数组中删除重复数组

例如:

$arr = array ( 
    array (-9,1,8), 
    array (-9,2,7), 
    array (-9,3,6), 
    array (-9,4,5), 
    array (-9,5,4), 
    array (-9,6,3), 
    array (-9,7,2), 
    array (-9,8,1) 
) 

需求是最终被:

$cleanArr = array ( 
    array (-9,1,8), 
    array (-9,2,7), 
    array (-9,3,6), 
    array (-9,4,5) 
) 

$cleanArr = array(  
    array (-9,5,4), 
    array (-9,6,3), 
    array (-9,7,2), 
    array (-9,8,1) 
) 

是否有此PHP函数或做我需要做一些一些循环清理重复?

回答

5

没有功能做到这一点,你可以使用功能的组合。你可以第一个排序所有数组首先按升序进行分批次的,然后再序列化每个在他们身上,利用array_unique,然后反序列化再有多维再次:

foreach($arr as &$a){ sort($a); } 
$arr = array_map('unserialize', array_unique(array_map('serialize', $arr))); 
print_r($arr); 
+0

是的,这个效果很好。这太糟糕了,没有一个这样的功能。 ++为伟大的工作! – Icewine 2015-03-19 06:43:27

+0

@Iwine确定我很高兴这有帮助 – Ghost 2015-03-19 07:22:58

0

试试这个:

<?php 

    $arr = array ( 
    array (-9,1,8), 
    array (-9,2,7), 
    array (-9,3,6), 
    array (-9,4,5), 
    array (-9,5,4), 
    array (-9,6,3), 
    array (-9,7,2), 
    array (-9,8,1) 
    ); 

    $arr = array_map(function($n) {return explode(',', $n);}, (array_unique(array_map(function($n) {sort($n); return implode(',', $n);}, $arr)))); 

echo var_export($arr, true); 

?> 

输出:

array (
    0 => 
    array (
    0 => '-9', 
    1 => '1', 
    2 => '8', 
), 
    1 => 
    array (
    0 => '-9', 
    1 => '2', 
    2 => '7', 
), 
    2 => 
    array (
    0 => '-9', 
    1 => '3', 
    2 => '6', 
), 
    3 => 
    array (
    0 => '-9', 
    1 => '4', 
    2 => '5', 
), 
)