douzhi7070 2016-04-28 12: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 12: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;
    });
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 高价求中通快递查询接口
  • ¥15 解决一个加好友限制问题 或者有好的方案
  • ¥15 关于#java#的问题,请各位专家解答!
  • ¥15 急matlab编程仿真二阶震荡系统
  • ¥20 TEC-9的数据通路实验
  • ¥15 ue5 .3之前好好的现在只要是激活关卡就会崩溃
  • ¥50 MATLAB实现圆柱体容器内球形颗粒堆积
  • ¥15 python如何将动态的多个子列表,拼接后进行集合的交集
  • ¥20 vitis-ai量化基于pytorch框架下的yolov5模型
  • ¥15 如何实现H5在QQ平台上的二次分享卡片效果?