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

) 
관련 문제