PHP从数据库字段中的名称访问多维数组(eval与变量)


PHP Accessing a multi-dimensional array from a name in a database field (eval vs variable variables)

我有一种情况,我们有一个数据库,它将查找值存储为字符串,格式为"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;
}