提问人:Jeff Greenberg 提问时间:12/18/2014 最后编辑:Jeff Greenberg 更新时间:12/18/2014 访问量:1347
PHP 动态访问关联数组
PHP Dynamically accessing an associative array
问:
从原始编辑,暗示只有 1 次访问
如果我有一个包含 x 个数组的数组,则每个数组的
array('country' => array('city' => array('postcode' => value)))
和另一个数组可能是
array('country', 'city', 'postcode') or array('country', 'city')
根据我需要检索的内容,我如何使用第二个数组来标识第一个数组的索引级别,然后访问它。
答:
1赞
dynamic
12/18/2014
#1
通过嵌套引用,您可以读取和修改原始值: ide1 上的实时示例:
http://ideone.com/xtmrr8$cur = &$cur[$v];
$array = array('x' => array('y' => array('z' => 20)));
$keys = array('x', 'y', 'z');
// Start nesting new keys
$cur = &$array;
foreach($keys as $v){
$cur = &$cur[$v];
}
echo $cur; // prints 20
$cur = 30; // modify $array['x']['y']['z']
评论
1赞
Rizier123
12/18/2014
我认为这是最好的答案!非常好的解释和很好的评论!值得一:D
0赞
Jeff Greenberg
12/18/2014
请允许我再补充一点。如果我有 20 个$array,假设每个都是一个国家,并且给定$keys,我需要以相同的方式访问 20 个中的每一个,有没有办法在不迭代每个国家的情况下做到这一点?
0赞
dynamic
12/18/2014
我不知道这是一个不同的问题还是相关的。无论如何,如果这个答案对您有所帮助,请考虑 +1 它
0赞
Jeff Greenberg
12/18/2014
同样的问题。只是想考虑效率。如果我的键是 ('capital', 'city', 'postcode']) 并且我想要 20 个国家/地区中每个国家/地区的邮政编码,一旦我确定了密钥,我应该怎么做?可能是,没有办法将其作为变量变量(如 ${$myarray}{['x']['y']['z']} 或类似的东西。只是确保。
0赞
dynamic
12/18/2014
如果您要访问阵列中的确切项目,您怎么能拥有 20 个国家/地区?无论如何,我认为这是另一个问题,打开一个新问题$array['capital']['city']['postcode']
1赞
Glen
12/18/2014
#2
遍历索引数组,逐步向下移动初始数组,直到到达索引数组的末尾。
$array1 = array('x' => array('y' => array('z' => 20)));
$keys = array('x', 'y', 'z');
$array_data = &$array1;
foreach($keys as $key){
$array_data = &$array_data[$key];
}
echo $array_data;
评论
0赞
dynamic
12/18/2014
这将创建该值的新副本
0赞
Glen
12/18/2014
编辑以通过引用传递
0赞
Jeff Greenberg
12/18/2014
#3
好的,我很抱歉最初没有更清楚地表达我的问题,但我让它按照我希望的方式工作,有一个变量变量,如下所示:
$keystring = '';
foreach ($keys as $key) {
$keystring .= "['$key']";
}
然后,针对其中的每个国家/地区条目迭代主数组,并按以下方式访问所需的值:
eval('$value = $entry' . "$keystring;");
上一个:带数组的变量
下一个:获取数组值的 PHP 变量变量
评论
stealth edit
$array['capital']['city']['postcode']