在PHP中使用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

我需要使用eval访问给定数组的特定索引和键,但当我的“路径”由字符串指定时,不知何故我无法这样做。我试图访问的代码和内容如下

$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;