【问题标题】:Extracting a subset of values from an associative array (php)从关联数组(php)中提取值的子集
【发布时间】:2010-10-08 20:04:01
【问题描述】:

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

$data = array('personName' => 'John', 'personAge' => 99, 'personId' => 1,  
              /* many more data I don't need here ... */);

list($name, $age, $id) = array_splice_by_keys($data,
                          array('personName', 'personAge', 'personId');

如果一切都失败了,难道没有内置函数可以通过键过滤关联数组吗?例如:

$filteredArray = array__extract__keys__and__values($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)));

array_flip 的有趣用法!

【问题讨论】:

    标签: php arrays associative-array


    【解决方案1】:

    这与 SilentGhost 的答案基本相同,但这可能更容易,而且可能会慢一点。

    array_intersect_key($array, array_flip($wantedKeys));
    

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2016-02-03
        • 2015-07-13
        • 1970-01-01
        • 1970-01-01
        • 2015-06-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多