【问题标题】:Php multidimensional search array key and value matching language pairphp多维搜索数组键值匹配语言对
【发布时间】:2016-04-28 12:23:28
【问题描述】:

在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 的所有值。所以基本上它会做的是 它将在 array2 中搜索 array1 源和语言对值。并返回这些值 不匹配

作为参考,您可以在 array1 中看到我们有数组块元素

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

        )

在array2中具有相同的值。但是没有匹配的

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

        )

在 array2 中,因此它应该返回错误,例如对于具有源语言和目标语言名称的给定对,它没有源语言和目标语言。那么有人可以告诉我这是怎么做到的吗?

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

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

        )

更新

我尝试了 array_merge 两个数组,之后我使用了array_diff($array1, $merged_array) 但它仍然无法正常工作。

【问题讨论】:

  • @FrayneKonok 任何使用键值对进行搜索的示例代码?
  • 需要一一做。我这边没有其他选择。
  • 显示预期输出
  • 可以帮助您将数组以代码形式提供给我们,以便我们可以复制它。
  • @RomanPerekhrest 检查更新的问题。结果应该怎么来

标签: php arrays multidimensional-array


【解决方案1】:

更新

由于某种原因array_udiff 在 PHP5 和 PHP7 中返回不同的结果。我们可以使用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;
});

【讨论】:

  • @NewUser 怎么不起作用?它输出的内容是否与您的预期不同或什么?
  • 它与数组值不匹配。你能检查一下并告诉我。
  • @NewUser,嗯,php5 和 php7 的输出不同,确实
  • 我正在使用 php5。你能帮我吗?
  • 感谢您的回答,但我的问题是从 array1 获取所有与 array2 不匹配的数组。在您的回答中,它显示了所有匹配的数组。你明白我的意思了吗?
猜你喜欢
  • 2014-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-13
  • 2014-06-21
  • 2017-09-08
相关资源
最近更新 更多