将字符串转换为变量

2022-08-30 20:11:58

我有一个多维关联数组,其中包含一个元素,如

$data["status"]
$data["response"]["url"]
$data["entry"]["0"]["text"]

我有一个字符串,如:

$string = 'data["status"]';
$string = 'data["response"]["url"]';
$string = 'data["entry"]["0"]["text"]';

如何将字符串转换为变量以访问正确的数组元素?此方法需要跨任何维度的任何数组工作。


答案 1

PHP的变量变量将在这里帮助你。您可以通过在变量前面加上另一个美元符号来使用它们:

$foo = "Hello, world!";
$bar = "foo";
echo $$bar; // outputs "Hello, world!"

答案 2

简单快速:

echo eval('return $'. $string . ';');

当然,需要先对输入字符串进行清理。

如果你不喜欢快速和肮脏...那么这也将起作用,它不需要eval,即使我也会畏缩。

但是,它确实对字符串格式进行了假设:

<?php
$data['response'] = array(
    'url' => 'http://www.testing.com'
);

function extract_data($string) {
    global $data;

    $found_matches = preg_match_all('/\[\"([a-z]+)\"\]/', $string, $matches);
    if (!$found_matches) {
            return null;
    }

    $current_data = $data;
    foreach ($matches[1] as $name) {
            if (key_exists($name, $current_data)) {
                    $current_data = $current_data[$name];
            } else {
                    return null;
            }
    }

    return $current_data;
} 

echo extract_data('data["response"]["url"]');
?>