PHP关联数组-返回验证列表中存在键的所有键值对?
例如:PHP关联数组-返回验证列表中存在键的所有键值对?,php,arrays,compare,associative-array,associative,Php,Arrays,Compare,Associative Array,Associative,例如: $searchParameters = array( 'parameter1' => 'value1', 'parameter2' => 'value2', 'parameter3' => 'value3', ); $allowedParamters = array('parameter1','parameter2'); 获取仅包含允许对的$searchParameters的最佳方法是什么 foreach($searchParameters
$searchParameters = array(
'parameter1' => 'value1',
'parameter2' => 'value2',
'parameter3' => 'value3',
);
$allowedParamters = array('parameter1','parameter2');
获取仅包含允许对的$searchParameters
的最佳方法是什么
foreach($searchParameters as $key => $value) {
if(!array_key_exists($key, $allowedParamters)) {
unset($searchParameters[$key];
}
}
这将删除不允许的键及其值。使用:
这会比使用AFORACH溶液更重吗?它必须循环通过每一个,并检查关键点,但另外还有数组翻转。这是我见过的最整洁的方式
array\u intersect\u key()
具有内部优化功能,它不会只使用循环。但就记忆而言,这会更重,是的。就时间而言,你必须检查这一点。我的测试显示,array\u intersect()
(链接不会显示执行时间,因为sandbox正在阻止回调,但您可以从那里粘贴代码并进行检查)好的,这可能对较小的数组更好,任何大的数组和其他解决方案都会节省内存。谢谢在大型阵列上,这将以更快的速度获胜(因为内部array\u intersect\u key()
针对普通循环进行优化)。但是如果内存很重要,那么使用loop,是的。因此这是为了速度,foreach for memory这可能比array_intersect_key方法慢,但是我认为对于大型数组更好,因为它可以避免克隆它。谢谢
$searchParameters = array(
'parameter1' => 'value1',
'parameter2' => 'value2',
'parameter3' => 'value3',
);
$allowedParamters = array('parameter1','parameter2');
$result = array_intersect_key($searchParameters, array_flip($allowedParamters));
foreach($searchParameters as $key=>$value){
if(in_array($key,$allowedParamters)){
$trueResult[$key] = $value;
}
}
print_r($trueResult);