cakePHP: Notice: Notice(8):未初始化的字符串偏移量


cakePHP: Notice: Notice (8): Uninitialized string offset

我得到这个错误信息

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

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

可以对数组和字符串应用$foobar[15]结构。如果它是一个数组,它返回索引为15的数组元素,如果它是一个字符串,它返回所请求的数字位置的字母(在本例中是第16位,因为计数从0开始)。

如果你得到消息" uninitialized…offset ",这意味着你正在请求一个不存在的数组或字符串的一部分。

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

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

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

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

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