从关联数组(php)中提取值的子集

从关联数组(php)中提取值的子集,php,arrays,associative-array,Php,Arrays,Associative Array,我想做一些看起来很简单的事情,但我找不到任何东西:只需提取数组的子集,类似于array_splice,但使用键检索值: 如果所有这些都失败了,难道没有一个内置函数来按键过滤关联数组吗?例如: $filteredArray=array\uuuu提取\uuu键和\uu值($srcArray,$arrayOfWantedKeys) // create a new array with ONLY those key => values I need $wanted_values = array_e

我想做一些看起来很简单的事情,但我找不到任何东西:只需提取数组的子集,类似于array_splice,但使用键检索值:

如果所有这些都失败了,难道没有一个内置函数来按键过滤关联数组吗?例如:

$filteredArray=array\uuuu提取\uuu键和\uu值($srcArray,$arrayOfWantedKeys)

// create a new array with ONLY those key => values I need
$wanted_values = array_extract_keys_and_values($data,
                  array('personName', 'personAge', 'personId');

echo $wanted_values['personName'];  
我想我之所以要做第一个,是因为我不喜欢在我的代码中重复关联数组访问,最好将经常使用的值(例如在循环中)复制到局部变量中,而且键入$name比键入$somearray['name']容易得多

编辑:谢谢,我想对于使用列表,解决方案是

list($x, $y, $z) = array_values(array_intersect_key($array, array_flip($wantedKeys)));

正在测试数组的使用\u flip

在php版本>=5.1.0中,您可以使用:


$ex中的值无关紧要,它们必须存在。

这与SilentGhost的答案基本相同,但这可能更容易,也可能更慢

array_intersect_key($array, array_flip($wantedKeys));
$data = array('personName' => 'John', 'personAge' => 99, 'personId' => 1,  
          'test' => 23);
$ex = array('personName'=>0, 'personAge'=>0, 'personId'=>0);
var_dump(array_intersect_key($data, $ex));
array_intersect_key($array, array_flip($wantedKeys));