0

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

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);
                            }
                        }
                    }
                }
            }
        }
4

2 回答 2

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);
于 2013-05-27T12:38:31.643 回答
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
        )

)
于 2013-05-27T12:27:41.120 回答