也许我会疯了,但我可以发誓有一个PHP核心函数,它将两个数组作为参数:
$a = array('1', '3');
$b = array('1'=>'apples', '2'=>'oranges', '3'=>'kiwis');
执行交集,检查数组$a
中的值是否与数组$b
中的键发生冲突。返回类似
array('1'=>'apples', '3'=>'kiwis');
是否存在这样的功能(我在文档中遗漏了这个功能),还是有一种非常优化的方法来实现同样的功能?
答案 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];
}