Преобразовать строку в значение массива в PHP - PullRequest
0 голосов
/ 24 января 2011

Если бы у меня был массив, такой как:

testarray = array('foo'=>34, 'bar'=>array(1, 2, 3));

Как бы я мог преобразовать строку, такую ​​как testarray[bar][0], чтобы найти значение, которое она описывает?

Ответы [ 2 ]

2 голосов
/ 24 января 2011

Ну, вы можете сделать что-то вроде этого (не самое красивое, но гораздо безопаснее, чем eval) ...:

$string = "testarray[bar][0]";

$variableBlock = '[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*';
$regex = '/^('.$variableBlock.')((\[\w+\])*)$/';
if (preg_match($regex, $string, $match)) {
    $variableName = $match[1]; // "testarray"
    if (!isset($$variableName)) {
        //Error, the variable does not exist
        return null;
    } else {
        $array = $$variableName;
        if (preg_match_all('/\[(\w+)\]/', $match[2], $matches)) {
            foreach ($matches[1] as $match) {
                if (!is_array($array)) {
                    $array = null;
                    break;
                }
                $array = isset($array[$match]) ? $array[$match] : null;
            }
        }
        return $array;
    }
} else {
    //error, not in correct format
}
1 голос
/ 24 января 2011

Вы можете использовать функцию eval в PHP.

http://php.net/manual/en/function.eval.php

Тем не менее, убедитесь, что вход очищен!

Приветствия

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...