2016-04-28 11 views
0

私は配列2における配列1のすべての値を検索したいこのPHPの多次元検索配列のキーと値の一致する言語ペア

$array1 = 
Array 
(
    [0] => Array 
     (
      [source_language] => Arabic 
      [target_language] => Array 
       (
        [0] => Assamese 
        [1] => Azerbaijani 
       ) 

     ) 
    [1] => Array 
     (
      [source_language] => Azerbaijani 
      [target_language] => Array 
       (
        [0] => Burmese 
        [1] => Korean 
       ) 

     )   

) 

$array2 = 
Array 
(
    [1] => Array 
     (
      [source_language] => English 
      [target_language] => Array 
       (
        [0] => German 
        [1] => Norwegian 
       ) 

     ) 

    [2] => Array 
     (
      [source_language] => Azerbaijani 
      [target_language] => Array 
       (
        [0] => Burmese 
        [1] => Korean 
       ) 

     ) 

    [3] => Array 
     (
      [source_language] => Azerbaijani 
      [target_language] => Array 
       (
        [0] => Kazakh 
        [1] => Maithili 
        [2] => Uzbek 
       ) 

     ) 

) 

ように二つの配列を持っています。ですから、基本的には ですが、array2のarray1ソースと言語のペア値を検索します。そして、配列2で同じ値を持つそれらの値あなたは配列1に見ることができます参照の一致

に我々はアレイブロック要素を持っていません

[1] => Array 
     (
      [source_language] => Azerbaijani 
      [target_language] => Array 
       (
        [0] => Burmese 
        [1] => Korean 
       ) 

     ) 

を返します。しかし、ソースとターゲット言語名とそれらの特定のペアには、ソースとターゲット言語がないように、それはエラーを返す必要がありますので、配列2で

[0] => Array 
     (
      [source_language] => Arabic 
      [target_language] => Array 
       (
        [0] => Assamese 
        [1] => Azerbaijani 
       ) 

     ) 

に該当ありません。だから、誰かが私にどのようにこれを言うことができますか?

出力には、配列2で一致しない配列がすべて表示されます。だからここは私がarray_merge両方のアレイを試してみました、その後、私はarray_diff($array1, $merged_array) を使用しますが、まだ動作していないそのてい

この配列

[0] => Array 
     (
      [source_language] => Arabic 
      [target_language] => Array 
       (
        [0] => Assamese 
        [1] => Azerbaijani 
       ) 

     ) 

アップデートを返す必要があります。

+2

が –

+0

は、キーと値のペアで、検索のための任意のサンプルコードを@FrayneKonok ...のforeachとしてみてください)=その後、foreachを使用することができますか? – NewUser

+0

は1つずつ行う必要があります。私の側から他の選択肢はありません。 –

答えて

0

更新

PHP5とPHP7で異なる結果を返すarray_udiff何らかの理由で。私たちは、

$diff = []; 

foreach ($array1 as $a1) { 
    $h1 = md5(json_encode($a1)); 
    $found = false; 

    foreach ($array2 as $a2) { 
    if (md5(json_encode($a2)) == $h1) { 
     $found = true; 
     break; 
    } 
    } 

    if (!$found) { 
    $diff []= $a1; 
    } 
} 

オリジナル答え

$diff = array_udiff($array1, $array2, function ($a, $b) { 
    return md5(json_encode($a)) == md5(json_encode($b)) ? 0 : 1; 
}); 
+0

@Rusian Osmanovは私のために働いていません – NewUser

+0

@NewUserそれはどうやって動かないのですか?それは、あなたが期待しているものと何か違うものを出力していますか? –

+0

配列の値と一致しません。私に確認して知らせてくれますか? – NewUser