簡體   English   中英

PHP 7.2 不能在 eval 中使用字符串偏移作為數組

[英]PHP 7.2 Cannot use string offset as an array in eval

該代碼在 php 7.0 中運行。 移至 7.2 版本后出現錯誤。 我需要幫助來理解這一點。 我有一個 $map 和 $tempArray print_r 的 $locMap 值如下所示

Array
    (
        [1] => Array
            (
                [ID] => 1
                [LEVEL] => 1
                [NAME] => Operations1
                [CLASS] => ["e2"]["00"]

            )

        [2] => Array
            (
                [ID] => 2
                [LEVEL] => 1
                [NAME] => POperations2
                [CLASS] => ["e2"]["01"]

            )

        [26] => Array
            (
                [ID] => 26
                [LEVEL] => 2
                [NAME] => Operations3
                [CLASS] => ["e2"]["01"]["e2"]["00"]

            )
    )

$tempArray 的 print_r 值如下

Array
    (
        [account] => Array
            (
                [0] => Array
                    (
                        [id] => 1000
                        [name] => Homes
                        [level] => 
                        [rno] => 9
                    )

            )

    )

循環這個 $map 如下

foreach ($map $rec=>$det) {
     $dummyArray = array();
     $dummyArray['id'] = $det['ID'];
     $dummyArray['CLASS'] = $det['CLASS'];
     eval("\$tempArray['account'][0]".$det["CLASS"]." = \$dummyArray;");
}

錯誤:不能在 ************* 中使用字符串偏移作為數組:eval()'d code:1

在 eval function 內部,"\$tempArray['account'][0]" 是一個字符串,並再次與該字符串連接。 為什么在這種情況下會出現錯誤? 幫助我理解這一點以及如何解決此問題?

我相信問題出在你的串聯"\$tempArray['account'][0]".$det["CLASS"]." = \$dummyArray;" . 如果你 output 字符串,你可以看到評估了什么。 很可能,您忘記了 $det["CLASS"] 周圍的 []。 在您的情況下,第一部分可能是字符串,而不是數組。

順便說一句,我不確定你想做什么,但我不確定你是否使用最簡單的方法。

我不明白為什么它適用於 php7.0。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM