在PHP中使用EVAL访问数组索引
我需要使用eval访问给定数组的特定索引和键,但当我的“路径”由字符串指定时,不知何故我无法这样做。我试图访问的代码和内容如下在PHP中使用EVAL访问数组索引,php,arrays,json,eval,Php,Arrays,Json,Eval,我需要使用eval访问给定数组的特定索引和键,但当我的“路径”由字符串指定时,不知何故我无法这样做。我试图访问的代码和内容如下 $final_eval = eval(' var_dump($contents->beneficiarios[0]->nomeOperadora);//returns ok value 'Operadora 123' var_dump($contents->$temp_eval);//doesnt work when $temp_eva
$final_eval = eval('
var_dump($contents->beneficiarios[0]->nomeOperadora);//returns ok value 'Operadora 123'
var_dump($contents->$temp_eval);//doesnt work when $temp_eval's value is 'beneficiarios[0]->nomeOperadora'
return $contents->$temp_eval;
');
现在,如果我将$temp\u eval
与值'mensagem'
一起使用,而不加引号,那么对于指定的json键,它可以正常工作。(返回“找到2个用户”)
唯一的问题似乎是当我的“路径”指定数组索引时,因为我需要访问给定数组中的值
下面是$contents
值(我在尝试使用代码访问之前已经对其进行了解码):
我需要从第一个代码spinnet访问第一个var_dump
中的值,json_-key[index]->json_-key
,并以友好方式传递它们的“路径”。
有什么建议吗?提前谢谢 如前所述,评估确实是不必要的。我尝试过使用它,因为我动态地获得了每个对象的路径,并且作为我的第一种方法,它似乎是正确的
无论如何,问题是传递包含“->”或“[index]”表示的字符串不能正确访问对象的属性
我的解决方案是分解字符串,然后按照下面给出的方式循环:
$explode = explode('->', '$contents->beneficiarios[0]->nomeOperadora');
$i = 0;
foreach($explode as $item):
$has_array_index = false;
$array_index = null;
$has_array_index = preg_match("/\[(.*?)\]/", $item, $array_index, PREG_UNMATCHED_AS_NULL);
if($has_array_index):
$item = str_replace($array_index[0], '', $item);
$array_index = substr($array_index[0], 1, -1);
endif;
if($i == 0):
if($has_array_index)
$final_eval = $contents->$item[$array_index];
else
$final_eval = $contents->$item;
else:
if($has_array_index)
$final_eval = $final_eval->$item[$array_index];
else
$final_eval = $final_eval->$item;
endif;
$i++;
endforeach;
这可能不是最漂亮的解决方案,但现在它已经足够好了,可以继续处理更重要的事情。您在这里到底需要什么
eval
?它真的不应该轻易使用,如果有的话。为什么要使用eval,目的是什么?你能给你的帖子添加更多细节吗?
$explode = explode('->', '$contents->beneficiarios[0]->nomeOperadora');
$i = 0;
foreach($explode as $item):
$has_array_index = false;
$array_index = null;
$has_array_index = preg_match("/\[(.*?)\]/", $item, $array_index, PREG_UNMATCHED_AS_NULL);
if($has_array_index):
$item = str_replace($array_index[0], '', $item);
$array_index = substr($array_index[0], 1, -1);
endif;
if($i == 0):
if($has_array_index)
$final_eval = $contents->$item[$array_index];
else
$final_eval = $contents->$item;
else:
if($has_array_index)
$final_eval = $final_eval->$item[$array_index];
else
$final_eval = $final_eval->$item;
endif;
$i++;
endforeach;