在 PHP 中将字符串转换为数组值

发布于 2024-10-14 13:59:26 字数 155 浏览 7 评论 0原文

如果我有一个数组,例如:

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

我将如何转换一个字符串,例如 testarray[bar][0] 来查找其描述的值?

If I had an array such as:

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

How would I go about converting a string such as testarray[bar][0] to find the value its describing?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

请恋爱 2024-10-21 13:59:26

好吧,你可以做这样的事情(不是最漂亮的,但比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
}

Well, you can do something like this (Not the prettiest, but far safer than 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
}
我乃一代侩神 2024-10-21 13:59:26

您可以使用 PHP 的 eval 函数。

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

但是,请绝对确保输入已清理!

干杯

You could use PHP's eval function.

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

However, make absolutely sure the input is sanitized!

Cheers

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文