有点简单的PHP数组交集问题

时间:2009-11-16 12:51:30

标签: php arrays key intersection

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

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

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

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

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

4 个答案:

答案 0 :(得分:10)

尝试使用array_flip {切换键及其值},然后使用array_intersect() 在你的例子上:

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

答案 1 :(得分:2)

我不是100%清楚自己想要什么。你想从$ b?

检查$ a对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,以便您可以定义自己的函数来匹配键和/或值。

答案 2 :(得分:1)

执行一个简单的foreach迭代第一个数组并从第二个数组中获取相应的值:

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

答案 3 :(得分:0)

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

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