2013-05-12 1 views
2

2 개의 2D 배열이 있는데 어떻게 고유 한 키를 가져올 수 있습니까? 예 :array_push에서 중복 키를 방지하는 방법

$array = json_decode('[{"7654321":1368356071},{"1234567":1368356071}]',true); 
$array2 = array(array(1234567 => time()), array(7654321 => time()), array(2345678 => time())); 
//array_push($array, $array2[2]); 

-이 예에서는 $ array2 [2]와 같은 고유 키를 어떻게 동적으로 가져올 수 있습니까?

답변

1

처음 두 배열 중 하나에만 있지만 다른 두 배열에는 존재하지 않는 다른 배열을 밀어 넣으려는 것입니다 ($ keys_unique에서 말하자).

이 시도 :

$arrays_mixed = array( //your $array and $array2; you can put as many arrays as you want here 
    json_decode('[{"7654321":1368356071},{"1234567":1368356071}]',true) 
    ,array(array(1234567 => time()), array(7654321 => time()), array(2345678 => time())) 
); 

//begin getting all keys 
$arrays_keys = array(); //will hold all keys from arrays_mixed 
$keys_unique = array(); //will hold all unique keys out of arrays_key 
for($x=0;$x<count($arrays_mixed);$x++){ 
    $arrays_keys[$x] = array(); //prepares a "keys holder" 
    $toflatten = $arrays_mixed[$x]; 
    $c1 = 0; 
    do{ 
     $arrmixed = array(); 
     $arrclean = array(); 
     foreach($toflatten as $a){ 
      $arrmixed = $this->keys_finder($a,1); 
      $arrclean[$c1] = $this->keys_finder($a,2); 
      $c1++; 
     } 
     $toflatten = $arrmixed; 
    }while(is_array($toflatten)); 
    for($c2=0;$c2<$c1;$c2++) 
     foreach($arrclean[$c2] as $ac) 
      array_push($arrays_keys[$x],$ac); 
}//end geting all keys 

//begin finding unique keys 
foreach($arrays_keys as $ak) 
    foreach($ak as $add) 
     $keys_unique = $this->unique_inserter($arrays_keys,$keys_unique,$add); 
//end finding unique keys 

다음은 함수입니다 당신이 코드를 테스트 한 내 측면에 작동 ​​

function unique_inserter($arrays_keys,$keys_unique,$add){ 
    $detector = 0; //detects how many arrays contain a value 
    foreach($arrays_keys as $ak) 
     if(in_array($add,$ak)) 
      $detector++; 
    if($detector<2) //if value is found in one array only 
     array_push($keys_unique,$add); 
    return $keys_unique; 
} 
function keys_finder($array,$return){ 
    $arrmixed = array(); 
    $arrclean = array(); 
    foreach($array as $key=>$a) 
     if(is_array($a)) 
      foreach($a as $aa) 
       array_push($arrmixed,$aa); 
     else 
      array_push($arrclean,$key); 
    switch($return){ 
     case 1: 
      return (count($arrmixed)==0)?'':$arrmixed; 
      break; 
     case 2: 
      return $arrclean; 
      break; 
    } 
} 

이 필요합니다. 희망이 도움이됩니다.