【问题标题】:PHP 7.2 Cannot use string offset as an array in evalPHP 7.2 不能在 eval 中使用字符串偏移作为数组
【发布时间】:2019-11-21 09:06:28
【问题描述】:

代码在 php 7.0 中运行。移至 7.2 版本后出现错误。 我需要帮助来理解这一点。 我有一个 $map 和 $tempArray $locMap 的 print_r 值如下所示

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 函数中,"\$tempArray['account'][0]" 是一个字符串,并再次与该字符串连接。 为什么在这种情况下会出现错误? 帮助我理解这一点以及如何解决此问题?

【问题讨论】:

  • 这里为什么还需要 eval?
  • 不确定这里是否使用了 eval 。但它是一个古老的代码。我知道 eval 可以将字符串评估为 php 代码

标签: php eval php-7.2


【解决方案1】:

我相信问题出在"\$tempArray['account'][0]".$det["CLASS"]." = \$dummyArray;" 的串联上。如果您输出字符串,您可以看到评估的内容。很可能,您忘记了 $det["CLASS"] 周围的 []。在您的情况下,第一部分可能是一个字符串,而不是一个数组。

顺便说一句,我不确定你想做什么,但我不确定你是否使用最简单的方法。

我不明白为什么它适用于 php7.0。

【讨论】:

  • 计算的字符串的输出是 $tempArray['account'][0]["2"]["00"] = $dummyArray;
  • 好的。你需要 eval 吗?
  • 我不确定,添加eval的原因是什么。
  • 因为他们是通过连接字符串形成一个php代码,我们需要eval。
  • 你可以使用类似 $$tempArray['account'][0]".$det["CLASS"] = $dummyArray; 我不喜欢那种东西,但我认为它会更快地完成工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-04
相关资源
最近更新 更多