2011-10-23 1 views
0

다음과 같이 배열 배열이 있습니다. 이 배열에는 3 개의 배열이 포함되어 있으며 각 배열에는 18 개의 요소가 있습니다. 배열 내의 18 개의 요소가 다른 배열의 18 개 요소와 같은 경우 전체 부모 배열 ([0], [1], [2])을 제거하려고합니다. [transaction_id]와 [date]. 따라서 나머지 16 개의 요소는 배열이 중복 된 것으로 간주되고 부모 배열이 배열에서 제거되기 위해 동일해야합니다.배열의 특정 요소가 같으면 다차원 배열에서 부모 요소를 제거합니다.

도움을 주시면 감사하겠습니다. 이 웹 사이트를 검색했지만이 특정 문제에 대한 질문을 찾을 수 없습니다.

[0] => Array 
    (
     [transaction_id] => 3474 
     [date] => 2011-09-20 
     [location] => Kansas City 
     [year] => 2005 
     [year_diff] => 0 
     [make] => Ford 
     [make_id] => 19 
     [model] => F150 Sc Cab 
     [model_id] => 478 
     [subseries] => Lariat 
     [color] => Dk Grn 
     [doors] => X 
     [cylinders] => 8 
     [radio] => CD 
     [odometer] => 78029 
     [odometer_difference] => -4971 
     [odometer_difference_abs] => 4971 
     [price] => 9400 
    ) 

[1] => Array 
    (
     [transaction_id] => 1843 
     [date] => 2011-09-21 
     [location] => Kansas City 
     [year] => 2005 
     [year_diff] => 0 
     [make] => Ford 
     [make_id] => 19 
     [model] => F150 Sc Cab 
     [model_id] => 478 
     [subseries] => Lariat 
     [color] => Dk Grn 
     [doors] => X 
     [cylinders] => 8 
     [radio] => CD 
     [odometer] => 78029 
     [odometer_difference] => -4971 
     [odometer_difference_abs] => 4971 
     [price] => 9400 
    ) 

[2] => Array 
    (
     [transaction_id] => 7778 
     [date] => 2011-10-05 
     [location] => Kansas City 
     [year] => 2005 
     [year_diff] => 0 
     [make] => Ford 
     [make_id] => 19 
     [model] => F150 Crew Cab 
     [model_id] => 19 
     [subseries] => XLT 
     [color] => Blue 
     [doors] => C 
     [cylinders] => 8 
     [radio] => CD 
     [odometer] => 89887 
     [odometer_difference] => 6887 
     [odometer_difference_abs] => 6887 
     [price] => 15100 
    ) 

답변

0

내가 당신도 어떤 코드로 시작되지 않았기 때문에, 여기에 전체 솔루션을 쓰려고하지만, 여기에 내가 시작할 것 어떻게 아니에요 : 나는 기능의 비교 작성하는 것이 좋습니다

간단한 배열 function compare_arr(arr1, arr2, ignore_keys) { ... }의 경우, 다차원 배열의보다 구체적인 비교 함수에서 각 하위 배열을 호출 할 수 있습니다.

키 - 값 쌍 (foreach?)을 반복하고 현재 키가 배열 ignore_keys에 있는지 확인한 다음이 요소를 무시할 수 있습니다. 그렇지 않으면 값을 중복으로 플래그 할 수 있습니다. 값이 일치하지 않으면이 비교를 중단 할 수 있습니다.

나는 배열 필터 기능이 여기서 모든 것을 돕지 않는다고 생각한다.

+0

솔직하게이 문제를 시작하는 방법을 모르겠으므로 코드를 시작하지 않았습니다. 나는이 문제가 이전에 게시되지 않은 것에 놀랐다. –

+0

@ GabrielMurphy 그럼 rodneyrehm의 솔루션은 훨씬 쉽고 효율적입니다. 그의 해결책을 시도하십시오. – Smamatti

1

배열을 ==과 비교할 수 있다는 것을 알고 계셨습니까? 이

  1. 제거 TRANSACTION_ID,
  2. 가 서로에 대해 세 가지 결과 배열을 비교 (원본 또는 그림자에서)) (해제로 현재까지 매우 간단해야한다 염두에두고
    <?php 
    
    $a = array('a' => 'alpha', 'b' => 'bravo'); 
    $b = array('a' => 'alpha', 'b' => 'bravo'); 
    $c = array('a' => 'alpha', 'c' => 'charlie'); 
    $d = array('c' => 'charlie', 'a' => 'alpha'); 
    
    var_dump(
        $a == $b, // true 
        $a === $b, // true 
        $a != $c, // true (different keys/values) 
        $c == $d, // true 
        $c !== $d // true (no identity! - different order of keys) 
    ); 
    

  3. 재 삽입 TRANSACTION_ID, 날짜 (당신이 당신의 원본 데이터를 그림자하지 않은 경우)

당신은 할 수 또한

  1. 복사 배열은
  2. 제거 TRANSACTION_ID과 날짜 ksort와
  3. 종류의 그림자
  4. 직렬화() 문자열을
  5. SHA1() 배열의 해시를 얻을 수를 얻을 수
  6. 해시 비교