2013-05-27 94 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 
     ) 

)