删除多维数组中的重复项?

时间:2013-05-27 12:03:18

标签: php duplicates combinations

我想在多维数组中删除重复项。我的阵列是这样的:

a => array (a,b), b => array (b,a), c => array (a,b,c)

我尝试使用for循环并取消设置,但它会更改我的索引。是否有一个简单的函数如何检查重复值并删除整个键?我使用字符串abcdef生成我的多维数组的所有组合?

输出应为:a => array (a,b), c => array (a,b,c)。键b从数组中删除。

该函数需要检查键中的每个值与其他每个键值。这是关于删除所有排列。

我试过这个但是它会破坏我的索引并且整个数组都搞砸了:

            for($i=0;$i<=count($newarr[$i]);++$i)
        {

            for($k=0;$k<=count($newarr[$i]["grp"]);++$k)
            {
                $plz=$newarr[$i]["grp"][$k]["plz"];
                $rank=$newarr[$i]["grp"][$k]["rank"];
                for($j=$i+1;$j<=count($newarr);++$j)
                {
                    if (!$skip[$j])
                    {
                        for ($l=0;$l<=count($newarr[$j]["grp"]);++$l)
                        {
                            if ($plz==$newarr[$j]["grp"][$l]["plz"]
                                && $rank==$newarr[$j]["grp"][$l]["rank"] 
                                )
                            {
                                unset($newarr[$j]["grp"][$l]);
                                //$newarr=array_values($newarr);
                            }
                        }
                    }
                }
            }
        }

2 个答案:

答案 0 :(得分:2)

试试这个,

$array = array( 'a' => array(a,b), 'b' => array(b,a), 'c' => array(a,b,c));
$arrTemp = array();               

foreach($array as $key => $innerArr)
{
    foreach($array as $key1 => $innerArr1)  // 
    {
        if($key != $key1)   // compare if key is not same
        {
            sort($innerArr);    // sort array
            sort($innerArr1);   // sort array

            if($innerArr == $innerArr1 && !in_array($key1,$arrTemp))    // check is array is same but array key is diffrent
            {
                unset($array[$key1]);       // unset array
                $arrTemp[] = $key;      // make entry for not to compare further
            }
        }
    }
}

echo "<pre>"; print_r($array);

答案 1 :(得分:1)

所以这就是你如何完成这项工作:

$array = array('a' => array('a', 'b'), 'b' => array('b', 'a'), 'c' => array('a', 'b', 'c')); // Test data

$temp = $array; // temp array
foreach($array as $i => $o){
    array_multisort($temp[$i]); // sorting the multi temp array
}

foreach($temp as $k => &$v){
    foreach($temp as $m => &$n){
        if($k != $m && $v == $n){unset($array[$m], $temp[$m]);} // removing duplicates
    }
}

print_r($array); // printing results

<强>输出:

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

    [c] => Array
        (
            [0] => a
            [1] => b
            [2] => c
        )

)