长期读者,第一次提问。
我发现自己处于一种独特的境地,我能找到解决问题的最有效方法是建立一串钥匙来获取价值。我在这里使用代码块缩进时遇到了问题,因此我在Pastebin上提供了我的代码段:http://pastebin.com/Nn8xS5Vx
我正在尝试做的是逐步完成结构的每个级别,检查每个级别的错误,如果找到任何错误,请按以下格式将它们报告回$errors_array
:
[Level eg:Enterprise]
[0] Enterprise Name
[Platform]
[0] Platform Name
问题在于,当我检索名称时,我没有通过关卡,它正在查看数组的根。我的想法是编写一个for循环来构造一个字符串来提供当前级别,因此可以检索名称。
我要做的是构建一个包含每个级别的键的字符串,然后使用该字符串来引用$node
变量并分别拉出名称。这是一个伪示例:
$keyString = "[Enterprise][Platform][Offering]"
然后我会使用一些东西:
$node[$keystring]['name']
我希望我已经解释得那么好了。如果有人对如何实现这一点有任何建议,或者甚至是获得相同最终结果的更好方法,我将不胜感激。
答案 0 :(得分:1)
如果我已正确理解您的问题,您希望通过键列表在嵌套数组中获取值。有几种方法可以实现这一目标。这是一对夫妇:
// setup
$data = array(
'foo' => array(
'bar' => array(
'baz' => array(
'quux' => 'value'
)
)
)
);
$search = array('foo', 'bar', 'baz', 'quux');
// Method 1 - search by reference:
$value = $data;
foreach ($search as $key) {
if (is_array($value) && array_key_exists($key, $value)) {
$value = &$value[$key]; // use the reference to chase down the array
} else {
// handle errors here
}
}
var_dump($value); // 'value'
// Method 2 - search by recursion:
function getValue($value, array $keys) {
if ($keys === array()) {
return $value; // got to the end of the list of keys
}
$key = array_shift($keys);
if (is_array($value) && array_key_exists($key, $value)) {
return getValue($value[$key], $keys);
}
// handle errors here
}
var_dump(getValue($data, $search)); // 'value'
我认为这会略微简化您的问题,但我希望它有所帮助。
答案 1 :(得分:1)
您是否考虑过使用array_walk_recursive?我会给你当前的密钥,你可以很容易地使用一个全局变量(可能是脏的和坏的,但它应该工作)用作堆栈来跟踪当前值之上的数组键。