douzhi7070 2016-04-28 04:23
浏览 60
已采纳

Php多维搜索数组键和值匹配语言对

In php I have two array like this

    $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
                )

        )

)

I want to search all the values of array1 in array2. So basically what it will do is it will search array1 source and language pair value in array2. and return those values which is not in match

For reference you can see in the array1 we have the array block element

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

        )

which has the same value in array2. But there is no matching for

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

        )

in array2 so it should return the error like there is no source and target language for those given pair with source and target language name. So can someone tell me how do this?

The output should show all those array which does not match in array2. So here it should return this array

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

        )

Update

I have tried array_merge both arrays and after that I have used array_diff($array1, $merged_array) but still its not working.

展开全部

  • 写回答

1条回答 默认 最新

  • doulu5109 2016-04-28 04:45
    关注

    Update

    For some reason array_udiff returns different results in PHP5 and PHP7. We can use foreach then =)

    $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;
      }
    }
    

    Original answer

    $diff = array_udiff($array1, $array2, function ($a, $b) {
      return md5(json_encode($a)) == md5(json_encode($b)) ? 0 : 1;
    });
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
编辑
预览

报告相同问题?

手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部