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

6
也许我疯了,但我记得有一个PHP核心函数,它使用两个数组作为参数。
$a = array('1', '3');
$b = array('1'=>'apples', '2'=>'oranges', '3'=>'kiwis');

执行一个交集操作,其中检查数组$a中的值是否与数组$b中的键发生冲突。返回类似于以下内容:

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

这样的函数是否存在(我在文档中错过了吗),或者有没有非常优化的方法来实现相同的功能?
4个回答

10

尝试使用array_flip函数 {将键和值互换},然后在你的示例上使用array_intersect()。

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

1
这对于给定的示例可以工作,但不允许$b中有重复值。我会做$a的变化(因为它本来就应该保存键),并执行array_intersect_key($b, array_flip($a)) - Henrik Opel
6
array_intersect_key($b, array_flip($a)) 可以完成这个任务。干杯! - Lachlan McDonald
真不敢相信我没想到用array_flip。它很好地完成了工作,谢谢! - casraf

2

1

使用简单的 foreach 遍历第一个数组并从第二个数组中获取相应的值:

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

0

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接