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

2022-08-30 22:47:34

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

$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!


答案 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