2016-08-10 10 views
0

私は2つの配列を比較しようとしています。値が最初の配列に少なくとも1回存在する場合は、配列内の値を削除する必要がある配列の1つ。同じ値が別の配列に存在する場合、配列から値を削除する

array1: { 
    1: { 
     0: "1" 
    }, 
    1: { 
     0: "1" 
    }, 
    24: { 
     0: "24" 
    }, 
    24: { 
     0: "24" 
    }, 
    24: { 
     0: "24" 
    }, 
    24: { 
     0: "24" 
    }, 
    26: { 
     0: "26" 
    } 
}, 

array2: { 
    1: { 
     0: "blue" 
    }, 
    23: { 
     0: "yellow" 
    }, 
    24: { 
     0: "red" 
    }, 
    26: { 
     0: "green" 
    } 
}, 

私は何をする必要があることは、チェック配列1キーで、配列2は、キーのものと同じ値を持っているのであれば、私は唯一の

を持って終了する必要があり、この例では、アレイ2からそれらを削除します。ここでは配列がどのように見えるかです
array2: { 
    23: { 
     0: "yellow" 
    } 
} 

私はこれと同様のいくつかの異なるインスタンスに対してこれを行う必要があります。

私が試してみました:

$result = array_diff($array1, $array2); 
print_r($result); 

をし、それが返されます。

{ 
    25: { 
     0: "25" 
    } 
} 
{ 
    24: { 
     0: "24" 
    } 
} 
{ 
    24: { 
     0: "24" 
    } 
} 

を、私は最初の配列におけるそれらの倍数があるので、それは、これらの値を返すだことを実現しながら。私はどのようにダブルスを無視することができますかと思っています。また私は23が返されなかった理由を理解していない。

+0

シンプル 'array_diff()'普通の問題のために働くが、あなたは1つの要素の配列を含む配列を扱っているように見える、代わりに単に複数の配列を持つのでしょうが要素。私はあなたがこのような状況にいかに乗りこむことができたのか分かりませんが、この複雑な問題に対処するために厄介なコードを書くのではなく、まずこれを調べるべきです。 – Havenard

+0

私が元の投稿で言ったように、私はarray_diffを使ってみました。私はhttp://php.net/manual/en/function.array-diff.phpに行って、そこにあるドキュメンテーションを読んで、何かを理解できるかどうか確認しました。私はこれを2日間稼働させようとしてきました。だから私はここにそれを掲示しています。また、私は配列に対して多くのコントロールを持っていません。 – kemosabe

+0

@kamosabeこれは、 'array_diff()'は要素を比較していないので動作しません。実際の情報が2番目のレベルにネストされているため、配列を配列と比較しています。配列と配列を直接比較することはPHPではうまくいきません。そのため、 'array_diff()'はこの場合役に立たないのですが、本当に疑問があります。 – Havenard

答えて

2

作業をする必要があります:

<?php 
    foreach($array1 as $a1){ 
     unset($array2[$a1[0]]); 
    } 
?> 
+0

要素が設定されているかどうかを確認する必要はありません。したがって、条件3の場合はライン3を削除することができます。 – Prashanth

+0

真:)。だからそれは – Bart

+0

私はarray_key_existsを確認する必要がありました。 – kemosabe

関連する問題