2013-06-07 5 views
1

아무도 나에게 도움을 줄 수 없다면 여기에 도움이 될 수 있다면 여기에서 일할 수있게하려고 약 2 일을 보냈으므로 영원히 감사 할 것입니다. 두 개의 다차원 배열을 가져 와서 비교하고 싶다면 은 중복 레코드 인을 제거하십시오.PHP 다차원 배열 - 중복 제거

시나리오는 다음과 같습니다. array2의 값이 이미 사용자 프로필에 할당되었습니다. array1의 값은 사용자가 선택할 수있는 모든 사용 가능한 값입니다. 그래서 그 두 가지를 비교하려는 경우에만 이미 (배열의 왼쪽) 옵션으로 제공됩니다 할당되지 않은 것들 ...

$array1 = array(
    [0] => array([id] => 3 [name] => Eye Colour) 
    [1] => array([id] => 1 [name] => Hair Colour) 
    [2] => array([id] => 5 [name] => Hair Length) 
    [3] => array([id] => 4 [name] => Height) 
); 

$array2 = array(
    [0] => array([attribute_id] => 3 [name] => Eye Colour [active] => 1) 
    [1] => array([attribute_id] => 5 [name] => Hair Length [active] => 1)) 
); 

PHP의 array_diff() 함수는 다차원 배열 작업, 그리고하지 않습니다 주변에 좋은 검색을했지만 나에게 맞는 것을 찾을 수없는 것 같습니다!

되어야 상기 두 배열에 기초하여 그 결과

$array1 = array(
    [0] => array([id] => 1 [name] => Hair Colour) 
    [1] => array([id] => 4 [name] => Height) 
); 

에서 [활성] 필드는 무관하므로 I는 단지 그것이 ID 및 이름 필드를 비교해야한다. 나는 두 id 필드의 이름이 다르다는 것을 알고 있지만 데이터베이스 칼럼 이름처럼 변경할 수는 없다.

값만이 아니라 배열을 완전히 제거해야합니다. array()를 거기에 남겨 두었던 이전 시도에서 문제가 발생했습니다. 그러면 사용자가 선택할 수있는 필드를 생성하는 배열을 반복 할 때 문제가 발생합니다.

도와주세요. 나는 너에게 많은 맥주를 사줄거야! :)

감사합니다, 스티브

답변

2

내가 함께 할 방법을 알고하지 않는 PHP 함수 내장 그러나 여기에서 정의는 하나 : 주셔서 대단히 감사합니다,

$array1 = array(
    array('id' => 3, 'name' => 'Eye Colour'), 
    array('id' => 1, 'name' => 'Hair Colour'), 
    array('id' => 5, 'name' => 'Hair Length'), 
    array('id' => 4, 'name' => 'Height'), 
); 

$array2 = array(
    array('attribute_id' => 3, 'name' => 'Eye Colour', 'active' => 1), 
    array('attribute_id' => 5, 'name' => 'Hair Length', 'active' => 1) 
); 

// function to remove duplicates 
function myArrayDiff($array1, $array2) { 
    // loop through each item on the first array 
    foreach ($array1 as $key => $row) { 
     // loop through array 2 and compare 
     foreach ($array2 as $key2 => $row2) { 
      if ($row['id'] == $row2['attribute_id']) { 
       // if we found a match unset and break out of the loop 
       unset($array1[$key]); 
       break; 
      } 
     } 
    } 

    return array_values($array1); 
} 

$array3 = myArrayDiff($array1, $array2); 

print_r($array3); 

/* result: 
    Array 
    (
     [0] => Array 
      (
       [id] => 1 
       [name] => Hair Colour 
      ) 

     [1] => Array 
      (
       [id] => 4 
       [name] => Height 
      ) 

    ) 
*/ 
+0

안녕하세요 크리스 이것을 쓰는 시간을내어 - 그것은 완벽하게 작동하고 정확하게 내가 필요한 것입니다. 더 효율적인 방법이 있는지 확실하지 않습니다. 나는 그것이 단지 $ array2를 통해 여러 번 순환 할 것이라는 것을 알고 있으며, 이것은 큰 사용자 기반이있을 때 조금 뒤떨어 질 수있다. 여전히, 나는 당신의 시간과 전문성에 대해 매우 감사하고 있습니다. 감사합니다. 스티브 – SigmaSteve

+0

고마워요! 그것의 1am와 코드의 나중에 수천 줄, 당신의 솔루션은 실제로 그것의 가정하고 좋은 코멘트를 가지고있는 유일한 사람입니다! –