0

我正在开发一个 Drupal 模块,它允许用户在他们的视图中使用超全局变量作为过滤器。他们需要能够在字段中输入他们想要使用的变量,然后我的函数需要去检索该变量的值。如果您只允许一个级别并且只允许数组,这很容易。但我想允许多个级别,甚至更好的是,允许他们访问对象和/或数组。

所以如果用户选择SESSION,然后输入:['anarray']['anotherlevel']['something']

然后我的函数将获得以下值: $_SESSION['anarray']['anotherlevel']['something']

如果用户可以输入类似的内容会更好:['anarray']->anotherlevel->something['morethings']

我的函数将获得以下变量: $_SESSION['anarray']->anotherlevel->something['morethings']

等等。对于更简洁的代码,如果他们可以只使用 + 和 - 分别表示数组和对象,那就更好了。所以最后一个示例将输入为:+anarray-anotherlevel-something+morethings

有任何想法吗?

4

2 回答 2

2
$path = 'foo.bar.baz';

$value = $_SESSION;

foreach (explode('.', $path) as $key) {
    if (is_array($value) && array_key_exists($key, $value)) {
        $value = $value[$key];
    } else if (is_object($value) && property_exists($value, $key)) {
        $value = $value->$key;
    } else {
        throw new InvalidArgumentException(sprintf('The path %s does not exist', $path));
    }
}

echo $value;
于 2013-03-18T19:41:39.530 回答
0

您必须解析输入的字符串以查找+-处理它们。这真的没那么难。要解析字符串,您开始读取每个字符并检查它是否是 a+-. 如果它是其中之一,则开始记录从那里到下一个+/符号的所有字符,并使用(最初到)-记录缩进,以便如果您已阅读然后更新:$current$current = $_SESSION+abc$current

$current = (isset($current['abc'])) ? isset($current['abc'] : NULL;
于 2013-03-18T19:42:02.057 回答