PHP:注意:注意(8):未初始化的字符串偏移量

时间:2014-08-25 09:45:57

标签: php cakephp

我收到此错误消息

Notice: Notice (8): Uninitialized string offset: 39
经常在这条线上:

if(isset($getCity) && !empty($getCity)) $city = '/'.Inflector::slug($getCity[$this->request->params['named']['city']]); else $city = '';

我试图理解为什么我收到此消息并添加了调试日志

CakeLog::write('activity', 'getCity '.print_r($getCity, true).'===>'.$this->request->params['named']['city'] );

日志文件输出看起来像这样:

Activity: getCity {"39":"Montuiri"}===>39
告诉我的是什么 $getCity是一个result => {"39":"Montuiri"}的数组 并且$this->request->params['named']['city']不为空且有value => 39

那么是什么导致通知消息?我真的不明白如何解决这个问题,因为这些消息每天都会写我的调试日志......

2 个答案:

答案 0 :(得分:0)

您可以将构造$foobar[15]应用于数组和字符串。当它是一个数组时,它返回索引为15的数组元素,如果它是一个字符串,它返回所请求的数字位置的字母(在这种情况下为16,因为计数开始于零)。

如果您收到“未初始化...偏移”消息,则表示您正在请求不存在的数组或字符串的一部分。

虽然根据日志输出,$getCity是一个数组,PHP错误消息清楚地表明您在某个时候尝试访问字符串的第40个字母。

可能是代码有一个分支/循环,其中一个数组变量被覆盖为字符串,然后再次遍历上面的行,导致错误。

答案 1 :(得分:0)

如果以下任何变量实际上是字符串或null而不是数组,则会发生此错误。

尝试这个我不确定它是否适合你,但试试这个

   if(is_array($getCity) && !empty($getCity)) 
   {
    $city = '/'.Inflector::slug($getCity[$this->request->params['named'] 
    ['city']]); else $city = '';
   }