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