PHP从数据库字段中的名称访问多维数组(eval vs variable variables)

PHP从数据库字段中的名称访问多维数组(eval vs variable variables),php,variables,Php,Variables,我遇到的情况是,我们有一个数据库,它将查找值存储为字符串格式,例如“output.acme.status” PHP脚本正在读取一些相当复杂的JSON并将其拉入数组 我需要获取这个命名位置的实际值。因此,对于上面的“output.acme.status”示例,我希望阅读$test['output']['acme']['status'] 我尝试了各种形式的eval和变量,例如通过以下类型的伪代码: $desired_value = ${$database_field_name} eval("\$da

我遇到的情况是,我们有一个数据库,它将查找值存储为字符串格式,例如“output.acme.status”

PHP脚本正在读取一些相当复杂的JSON并将其拉入数组

我需要获取这个命名位置的实际值。因此,对于上面的“output.acme.status”示例,我希望阅读$test['output']['acme']['status']

我尝试了各种形式的eval和变量,例如通过以下类型的伪代码:

$desired_value = ${$database_field_name}
eval("\$database_field_name = \$database_field_name;");
这些方法不起作用。在PHP站点上使用eval的示例似乎非常适合我的用例,但是使用咖啡杯的示例1效果很好,但是当我尝试放入多维数组时,它不起作用

我还更改了数据库字段,使其包含$test['output']['acme']['status']格式的数据,但没有成功。我的第一个想法是允许。表示output.acme.status的格式,并对其执行explode()以生成正确的结构。虽然这对输出$test['output']['acme']['status']有效,但它实际上不会对其进行评估以给出值

就安全性而言,eval不会从原始用户那里获取输入,而是由开发人员内部用于测试目的


任何指向正确方向的指示都将不胜感激。提前感谢。

如前所述,您需要首先拆分字符串以获得不同的部分,以便使用循环检索数组中的部分。 这应该可以做到:

function getValue(array $data, $path) {
    $parts = explode('.', $path);

    foreach ($parts as $key) {
        if (is_array($data) && isset($data[$key])) {
            $data =& $data[$key];
        } else {
            return null;
        }
    }

    return $data;
}

不确定是否知道,但如果您希望“output.acme.status”为“$test['output']['acme']['status']”,我将使用“.”分隔符进行拆分,您将拥有您的数组…感谢您的回复。这个函数确实以$test['output']['acme']['status']的格式为我提供了一个PHP变量名,但我现在需要的是能够获取该变量的值。在这种情况下,数组$test应该包含值0。因此,“$test['output']['acme']['status']”的值应该是输出,而不是字符串“$test['output']['acme']['status']”。这有意义吗?它实际上给了你价值:)啊,是的,你是完全正确的,非常感谢你,在我试图弄明白这一点的时候,当我清除了所有我玩的垃圾时,它工作得非常完美!