根据数组中给定的键提取数组部分

时间:2013-04-25 16:59:14

标签: php arrays

我有两个数组。一个包含数据,另一个包含密钥。所以我有

$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);

我该怎么做?

3 个答案:

答案 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];
}