【问题标题】:Somewhat simple PHP array intersection question有点简单的PHP数组交集问题
【发布时间】:2010-12-17 01:18:20
【问题描述】:

也许我快疯了,但我可以发誓说有一个 PHP 核心函数将两个数组作为参数:

$a = array('1', '3');
$b = array('1'=>'apples', '2'=>'oranges', '3'=>'kiwis');

并执行交集,检查数组$a 中的值是否与数组$b 中的键发生冲突。返回类似的东西

array('1'=>'apples', '3'=>'kiwis');

是否存在这样的功能(我在文档中遗漏了),或者是否有非常优化的方法来实现相同的功能?

【问题讨论】:

    标签: php arrays key intersection


    【解决方案1】:

    只是 Gumbo 答案的一种变体,应该更有效,因为在进入循环之前对键进行测试。

    $intersection = array_intersect($a, array_keys($b));
    $result=array();
    foreach ($intersection as $key) {
        $result[$k]=$b[$k];
    }
    

    【讨论】:

      【解决方案2】:

      尝试使用 array_flip {用它们的值切换键},然后使用 array_intersect() 在你的例子中:

      $c = array_flip($b); // so you have your original b-array
      $intersect = array_intersect($a,c);
      

      【讨论】:

      • 这适用于给定的示例,但不允许在 $b 中重复值。我会做翻转 $a 的变体(因为它应该保持键)并做array_intersect_key($b, array_flip($a))
      • array_intersect_key($b, array_flip($a)) 原来可以完成这项工作。干杯!
      • 不敢相信我没有想到array_flip。做得很好,谢谢!
      【解决方案3】:

      做一个简单的foreach 来迭代第一个数组并从第二个数组中获取对应的值:

      $output = array();
      foreach ($a as $key) {
          if (array_key_exists($key, $b)) {
              $output[$key] = $b[$key];
          }
      }
      

      【讨论】:

        【解决方案4】:

        我不是 100% 清楚你想要什么。您要检查 $a 中的值与 $b 中的 KEYS 的值吗?

        有几个相交函数:

        http://php.net/manual/en/function.array-intersect.php http://www.php.net/manual/en/function.array-intersect-key.php

        但可能你需要:

        http://www.php.net/manual/en/function.array-intersect-ukey.php 以便您可以定义自己的函数来匹配键和/或值。

        【讨论】:

          猜你喜欢
          • 2023-03-12
          • 1970-01-01
          • 2011-02-09
          • 1970-01-01
          • 1970-01-01
          • 2011-10-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多