$array1 = ['key1'=>'val1', 'key2'=>'val2', 'key3'=>'val3']
$array2 = ['key1','key3']
我想从 array1 中获取在 array2 中有键的所有元素。所以结果应该是:
$result = ['key1'=>'val1', 'key3'=>'val3']
我尝试了array_intersect_key($array 1,$array 2(,但这不起作用。获得上述结果的最快方法是什么?
编辑:忘了提到array2可能是关联数组或单维。
你需要先将 key1 和 key2 作为第二个数组中的键,然后才能使用 array_intersect_key((: 使用 array_flip(( 来执行此操作
$result = array_intersect_key($array1,array_flip($array2));
编辑
$array 2 是否关联并不重要:
$array1 = array('key1'=>'val1', 'key2'=>'val2', 'key3'=>'val3');
$array2 = array('first'=>'key1','second'=>'key3');
$filteredData = array_intersect_key($array1,array_flip($array2));
var_dump($filteredData);
仍然给
array
'key1' => string 'val1' (length=4)
'key3' => string 'val3' (length=4)
function my_intersect($a1, $a2){
$func = function(&$v, $k) {
$v = (is_string($k)) ? $k : $v;
};
array_walk($a2, $func);
$a2 = array_fill_keys(array_values($a2),1);
$ret = array();
if ($a1){
foreach($a1 as $k => $v){
if (array_key_exists($k, $a2)){
$ret[$k] = $v;
}
}
}
return $ret;
}
有点丑,我认为这是提问者想要的? 可能是更好的方法。
不是纯粹优雅的单行代码,但它会起作用:
$result = array();
foreach($array2 as $key) {
$result[$key] = $array1[$key];
}
响应编辑,只需使用 values($array2)
.