【发布时间】:2015-02-19 20:59:06
【问题描述】:
给定以下格式的键名数组(字段数可以更改):
$field_names = Array
(
[0] => web
[1] => results
[2] => result
[3] => title
)
我想访问以下多级数组的“内容”键值:
$values=stdClass Object(
[web] => Array(
[results] => Array(
[result] => Array(
[title] => Array(
[type] => default
[content] => Sample content
)
)
)
)
)
上面的数组如何访问值的示例:
$value = $values->{$field_names[0]}[$field_names[1]][$field_names[2]][$field_names[3]]['content'];
为了简单起见(保持简单的 PHP),我不会详细介绍,因为现有代码是一些处理程序的一部分,它是一些插件的一部分,它是一些 module 的一部分,它是另一个模块,它是内容管理系统的一部分,用于解析 YQL 结果,但它的逻辑被破坏了。
代码如下:
$field = array_shift($field_names);
$value = $values->$field;
foreach ($field_names as $field) {
if (is_array($value)) {
$value = $value[$field];
}
}
我试过做一个脏补丁,比如:
$value = is_string($value[$field]) ? $value[$field] : $value[$field]['content'];
它适用于一个例子,但它并不适用于所有情况,就像上面的例子一样。
我知道递归函数和array_walk_recursive(),但我想避免使用它们的麻烦,以使其尽可能简单。
有没有简单的方法来访问具有动态键名数组的多级数组的值?
【问题讨论】:
标签: php arrays multidimensional-array traversal