当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《从关联数组中提取值的子集(php)》经验,为你挑选了2个好方法。

我想做一些看似非常简单的事情,但我找不到任何关于它的东西:只需提取类似于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'];  

我想我想要做第一个的原因是我不喜欢在我的代码中重复关联数组访问,看起来更好地优化复制大量使用的值(例如循环中) ),到一个局部变量,加上它比$ somearray ['name']更容易输入$ name.

编辑:谢谢,我想与列表一起使用,解决方案将是

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

不感兴趣使用array_flip!



1> Tom Haigh..:

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

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



2> SilentGhost..:

在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无所谓,他们只需要在场.

推荐阅读
kikokikolove
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有