2011-10-23 14 views
0

私は以下のように配列の配列を持っています。この配列は3つの配列を含み、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よく、ロッドロッドのソリューションはさらに簡単で、おそらくより効率的です。彼の解決策を試してください。 – Smamatti

1

==と配列を比較できることはご存知ですか?それは

  1. 削除TRANSACTION_ID、
  2. が互いに対して得られた3つの配列を比較する(オリジナルまたは影から))(未設定で日付に非常に単純であるべきであることを念頭に置いて
    <?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、日付(あなたは、元のデータをシャドウしていない場合)

あなたができました配列

  • のハッシュを取得するために)(文字列
  • SHA1を取得するksort
  • シリアル化と
  • 削除TRANSACTION_IDと日付
  • ソートを()シャドーも

    1. コピー配列このハッシュを比較する
  • 関連する問題