PHP删除多维数组中的重复数组

时间:2015-03-19 04:38:33

标签: php arrays multidimensional-array duplicates

我需要检查2D数组($ arr)是否有重复项(顺序无关紧要)并将它们放入干净的数组中。

例如:

$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函数或我是否需要进行某种循环来清除重复项?

2 个答案:

答案 0 :(得分:5)

这没有任何功能,你可以使用功能的组合。您可以先将所有子批次的数组先按升序排序,然后对它们进行序列化,使用array_unique,然后再次反序列化以再次具有该多维:

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

答案 1 :(得分: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',
  ),
)