给出两个数组:
$foo = array('a', 'b', 'c');
$bar = array('a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5);
是否有内置的PHP函数来生成以下结果数组?
$result = array('a' => 1, 'b' => 2, 'c' => 3);
我已经浏览了php.net上的Array Functions列表,但似乎无法找到我正在寻找的内容。我知道如果需要的话我自己该怎么做,但我认为这可能是一个普遍存在的问题,可能有一个内置函数来做它并且不想重新发明轮子。
答案 0 :(得分:6)
使用array_flip和array_intersect_keys的另一种方式:
$foo = array('a', 'b', 'c');
$bar = array('a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5);
$common = array_intersect_key($bar, array_flip($foo));
<强>输出强>
array(3) {
["a"]=>
int(0)
["b"]=>
int(1)
["c"]=>
int(2)
}
答案 1 :(得分:1)
这是一个肮脏的黑客,但它的工作原理:
function extractKeys($keys, $data) {
extract($data);
return call_user_func_array('compact', $keys);
}
$foo = array('a', 'b', 'c');
$bar = array('a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5);
var_dump(extractKeys($foo, $bar));
输出:
array(3) {
["a"]=>
int(1)
["b"]=>
int(2)
["c"]=>
int(3)
}
答案 2 :(得分:0)
发帖后,我想到了一种方法:
array_intersect_key($bar, array_fill_keys($foo, NULL))
虽然这不是我所希望的简洁的内置函数,但它肯定比手动构造结果数组更好。