6

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

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

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

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

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

4

4 回答 4

10

尝试使用 array_flip {switches keys with their values},然后在您的示例中使用 array_intersect() :

$c = array_flip($b); // so you have your original b-array
$intersect = array_intersect($a,c);
于 2009-11-16T12:56:12.097 回答
2

我不是 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以便您可以定义自己的函数来匹配键和/或值。

于 2009-11-16T13:00:50.610 回答
1

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

$output = array();
foreach ($a as $key) {
    if (array_key_exists($key, $b)) {
        $output[$key] = $b[$key];
    }
}
于 2009-11-16T13:04:51.617 回答
0

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

$intersection = array_intersect($a, array_keys($b));
$result=array();
foreach ($intersection as $key) {
    $result[$k]=$b[$k];
}
于 2009-11-16T13:33:20.003 回答