PHP 动态访问关联数组

3

编辑自原本暗示只有1次访问的内容

如果我有一个包含x个数组的数组,每个数组都是以下形式:

array('country' => array('city' => array('postcode' => value)))

还有一个可能是数组的其他内容

array('country', 'city', 'postcode') or array('country', 'city') 

根据我需要检索的内容,在使用第二个数组来确定第一数组中的索引级别并访问它。


有没有特别的原因不使用简单的循环? - Gabriel
1
我几乎会称之为“隐形编辑”!如果您扩展了问题,请将其标记为EDIT!如果编辑是一个全新的问题,请提出一个新问题! - Rizier123
这不是一个全新的问题。它被编辑以显示需要多次完成。 - Jeff Greenberg
抱歉,但这个编辑与您的原始问题相同,您不能在 $array['capital']['city']['postcode'] 中有多个值,正如我在评论中所解释的那样。 - dynamic
不,你不能这样做。但那不是重点。我只是想说,如果数组包含20个国家,我需要根据每个20个国家的索引再次迭代吗?还是有一种方法可以将索引组装成一个变量,并使用它访问每个国家,而不是迭代。 - Jeff Greenberg
3个回答

1
通过嵌套使用引用:$cur = &$cur[$v];,您可以读取和修改原始值:
在ide1上的实时示例:http://ideone.com/xtmrr8
$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
我认为这是最好的答案!非常好地解释和评论!值得点赞:D - Rizier123
让我再加上一个考虑因素。如果我有20个$array,每个都代表一个国家,并给定$keys,我需要以相同的方式访问这20个,是否有一种方法可以不迭代每个来实现? - Jeff Greenberg
我不知道那是一个不同的问题还是相关的问题。无论如何,如果这个答案对你有帮助,请考虑点赞它。 - dynamic
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Jeff Greenberg
如果您正在访问数组$array['capital']['city']['postcode']中的确切项,那么如何有20个国家呢?无论如何,我认为这是另一个问题,请开一个新问题。 - dynamic
好的,抱歉。我觉得这次我表达得更清楚了。如果没有一种方法可以在不迭代的情况下访问它们中的每一个,已确定键,则当然我会选择您当前的答案。 - Jeff Greenberg

1
循环遍历索引数组,逐步遍历初始数组直到到达索引数组的末尾。
$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;

这将创建该值的新副本。 - dynamic
修改为通过引用传递。 - Glen

0

好的,我很抱歉最初没有表达清楚我的问题,但我现在已经用变量变量解决了它,如下所示:

$keystring = '';
foreach ($keys as $key) {
  $keystring .= "['$key']";
}

然后迭代主数组,对其中的每个国家条目进行访问,并按以下方式访问所需值:

eval('$value = $entry' . "$keystring;");

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接