【问题标题】:getting really annoying error: "Fatal error: Cannot use string offset as an array in..."变得非常烦人的错误:“致命错误:无法将字符串偏移量用作...中的数组”
【发布时间】:2011-03-21 18:21:44
【问题描述】:

如何摆脱这个错误?

代码:

        function get_green_entities($c,$array){
            $thisC = &$this->output[$this->sessID];    
            $timeDif = 4;
            $cols = count($thisC['clientCols'])+1;
            if(!isset($array['Entity ID'])){
                return get_grey($c);
            }
            if(!isset($thisC['CURRTIME'][$array['Entity ID']])){
                $thisC['CURRTIME'][$array['Entity ID']] = 
                      (isset($array['timestamp'])?$array['timestamp']:null);
            }
        }

我在最后一个 if 语句的行中遇到了这个错误:

$thisC['CURRTIME'][$array['Entity ID']] = 
                          (isset($array['timestamp'])?$array['timestamp']:null);

我知道$array['Entity ID']=4

我该如何解决这个问题?

谢谢:-)

更新 3
我删除了转储,因为它们有点敏感

【问题讨论】:

  • 你能给我们一个 $thisC 的 var_dump 吗?
  • 请问您在哪一行代码中遇到了偏移错误?
  • 我说上面哪一行我得到了错误。没有改变
  • $array['Entity ID']的值是多少
  • $array['Entity ID']的值为4

标签: php arrays string


【解决方案1】:

$thisC$thisC['CURRTIME']$array 不是数组只有三种可能...

您可以更改函数签名以防止后者:

function get_green_entities($c, array $array)

如果$array是问题所在,调用函数时会触发。所以现在如果问题仍然存在,你知道它与$thisC 有关。

在出现错误之前在线路上调用var_dump 应该可以明确问题所在。

考虑以下行为:

$array = 'test';

if (!isset($array['foo']['bar']))
  $array['foo']['bar'] = true; // error is triggered here

所以我认为问题在于$thisC['CURRTIME'] 并不总是像您期望的那样是一个数组。

【讨论】:

  • @Neal,你说这是“最后一次成功”。我认为这意味着错误发生之前的那个,这并没有真正提供解释。请参阅我的答案中附加的示例,了解与您所描述的行为相似的行为。
  • 是的。我将转储放在 if 语句中。在设置 var 之前
  • @Neal,你只会在设置像$a[0][1] = 'bar' 这样的字符串变量的多个组件时收到该错误消息,因为 PHP 的奇怪类型杂耍,所以鉴于你提供的代码它必须是$thisC 不是数组。您可能想尝试if (!is_array($thisC)) die('...'); 来检查。您也可以尝试用原件的副本/粘贴替换参考,以确保不会发生奇怪的事情。
  • 当我print_r($thisC) 时我如何得到一个数组结果?
  • 请注意print_r(NULL)(或'')不显示任何内容。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-21
  • 2012-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多