2015-03-19 117 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', 
), 
)