2013-05-27 56 views
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); 
          } 
         } 
        } 
       } 
      } 
     } 
+0

使用'unset()'不会改变你的索引,你能告诉我们你当前的代码吗? – HamZa

+0

我需要删除所有的排列,但for循环和unset不起作用。我读过你需要重新索引数组,我试过array_values无济于事。 – Bytemain

+0

你能提供预期的输出吗? – HamZa

回答

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); 
+0

谢谢,你能看看我的代码吗?我更新了我的问题? – Bytemain

+0

添加内部循环的结尾,您还需要将外部循环中的键添加到arrTemp,否则会使解决方案无法工作。谢谢! – Bytemain

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 
     ) 

)