2017-06-27 3 views
0

元のコードはこれです:検証のeval()は7

$hash_stack = array(); 
foreach ($values as $key => $val) 
{ 
    array_push($hash_stack, $val['tag']);    
    eval("\$ret[" . implode($hash_stack, "][") . "] = '{$val[value]}';"); 
    array_pop($hash_stack); 
} 

それはPHP5で動作しますが、ないPHP7中:

Notice: Undefined index: . resultObj][result . in /srv/users/...

:私は、配列内の各アイテムのため、このエラーを得た

私はこれでそれを修正しようとした:

$value = $val['value']; 
$implode = implode($hash_stack, "]["); 
eval("\$ret[" . $implode . "] = '{$value}';"); 
array_pop($hash_stack); 

しかし、まだエラーが発生しています。私は間違って何をしていますか?

私はこのエラーを取得する:

Notice: Use of undefined constant resultObj - assumed 'resultObj' in /srv/use

答えて

1

あなたの配列のキーは、プレーンコードではなく文字列であるので、あなたがそのエラーを取得しています。エスケープして引用する必要がありますが、正直なところ、私はevalを一掃します。

あなたが参照して同じことを行うことができる必要があります:

$hash_stack = array(); 
foreach ($values as $key => $val) 
{ 
    array_push($hash_stack, $val['tag']); 

    $r = &$ret; 
    foreach ($hash_stack as $h) 
    { 
     $r = &$r[$h]; 
    } 
    $r = $val['value']; 

    array_pop($hash_stack); 
} 
関連する問題