0

ユーザーがビューでスーパーグローバル変数をフィルターとして使用できるようにする Drupal モジュールを開発しています。使用したい変数をフィールドに入力できるようにする必要があります。次に、関数でその変数の値を取得する必要があります。1 つのレベルと配列のみを許可する場合、これは簡単です。しかし、複数のレベルを許可したいと考えています。さらに良いことに、オブジェクトや配列にアクセスできるようにしたいと考えています。

したがって、ユーザーが 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

入力された文字列を解析して検索し+-処理する必要があります。それは本当に難しいことではありません。文字列を解析するには、各文字の読み取りを開始し、それが または である+かどうかを確認し-ます。それらの 1 つである場合は、そこから次の+/-記号までのすべての文字の記録を開始し、インデントを$current(最初は に$current = $_SESSION) 記録して、読んだ+後に次のabcように更新$currentします。

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