PHP,传递包含数组键的字符串以查找数组值

时间:2011-07-27 21:45:34

标签: php arrays string key eval

长期读者,第一次提问。

我发现自己处于一种独特的境地,我能找到解决问题的最有效方法是建立一串钥匙来获取价值。我在这里使用代码块缩进时遇到了问题,因此我在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']

我希望我已经解释得那么好了。如果有人对如何实现这一点有任何建议,或者甚至是获得相同最终结果的更好方法,我将不胜感激。

2 个答案:

答案 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?我会给你当前的密钥,你可以很容易地使用一个全局变量(可能是脏的和坏的,但它应该工作)用作堆栈来跟踪当前值之上的数组键。