我有两个数组。一个包含数据,另一个包含密钥。所以我有
$data = array(
'name' => array('label' => 'Name:', 'value' => 'Genghis'),
'age' => array('label' => 'Age:', 'value' => '67'),
'weigh' => array('label' => 'Weigh in Kgs:', 'value' => '78')
);
和
$keys = array('name', 'age');
现在我只想提取name
的{{1}}和age
元素。有点像这样。
$data
输出应该是这样的。
$extracted = somemethod($data, $keys);
var_export($extracted);
我该怎么做?
答案 0 :(得分:3)
我会使用这样的array_intersect_key()
函数:
$data = array(...); // initial array as described
$retained_keys = array('name' => 'value not used', 'age' => 'value not used');
$filtered_array = array_intersect_key($data, $retained_keys);
答案 1 :(得分:2)
循环键,抓取数组值并返回它们:
function somemethod($data, $keys) {
$return = array();
foreach( $keys as $k) {
$return[$k] = isset( $data[$k]) ? $data[$k] : null;
}
return $return;
}
当找不到字段时,上面添加'null'。您可以修改foreach
循环,以便在$data
数组中找不到密钥时跳过密钥,如下所示:
function somemethod($data, $keys) {
$return = array();
foreach( $keys as $k) {
if( isset( $data[$k])) {
$return[$k] = $data[$k];
}
}
return $return;
}
修改:为了扩展Mike Brant的答案,array_intersect_key()
可以与函数中的array_flip()
一起使用,以实现所需的输出:
function somemethod($data, $keys) {
$keys = array_flip( $keys);
return array_intersect_key($data, $keys);
}
是的,它使用array_flip()
,但原始的$keys
数组未经修改,因为该数组的副本会被翻转。所以,您仍然可以使用以下函数调用此函数:
$extracted = somemethod( $data, array('name', 'age'));
答案 2 :(得分:1)
编写
并不是很麻烦$extracted = array();
foreach($keys as $key) {
if (isset($data[$key]))
$extracted[$key] = $data[$key];
}