2016-04-28 94 views
0

在PHP中,我有两个数组这样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 
       ) 

     ) 

) 

我要搜索在数组2阵列1的所有值。所以基本上它会做的是 它将在array2中搜索array1源和语言对值。并返回这些值 这是不匹配

作为参考可以在我们有阵列块元件

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

     ) 

其具有在数组2相同的值的数组1看到。但对于

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

     ) 

在数组2所以像有是为那些对给定与源语言和目标语言名称的源语言和目标语言应该返回错误没有匹配。那么有人能告诉我这是怎么回事?

输出应显示所有那些在array2中不匹配的数组。所以在这里,它应该返回这个数组

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

     ) 

更新

我试图array_merge两个阵列之后,我已经使用array_diff($array1, $merged_array) 但还是它不工作。

+2

尝试用foreach ... –

+0

@FrayneKonok搜索任何样本代码键值对? – NewUser

+0

需要一一做。没有其他选择从我身边。 –

回答

0

更新

出于某种原因,在PHP5和PHP7 array_udiff返回不同的结果。我们可以使用foreach然后=)

$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