PHP:Notice:Notice(8):未初始化的字符串偏移量
我收到了这个错误消息PHP:Notice:Notice(8):未初始化的字符串偏移量,php,cakephp,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 = ''; 我试图理解为什么会收到此消息,并添加了调试日志 Ca
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
是一个带有结果=>{“39”:“Montuiri”}
和$this->request->params['named']['city']
不是空的,并且具有值=>39
那么,是什么导致了通知信息?我真的不知道如何解决这个问题,因为这些消息每天都会写满我的调试日志…您可以将构造
$foobar[15]
应用于数组和字符串。当它是一个数组时,它返回索引为15
的数组元素,如果它是字符串,则返回请求的数字位置的字母(在本例中为16,因为计数从零开始)
如果您收到消息“uninitialized…offset”,则表示您正在请求数组或字符串中不存在的部分
尽管根据日志输出,$getCity
是一个数组,但PHP错误消息清楚地表明,在某个时刻,您试图访问字符串的第40个字母
这可能是因为代码有一个分支/循环,其中数组变量被改写为字符串,然后再次通过上述行运行,从而导致错误。如果以下任何变量实际上是字符串或null而不是数组,则会发生此错误 试试这个我不确定它对你是否有用但试试这个
if(is_array($getCity) && !empty($getCity))
{
$city = '/'.Inflector::slug($getCity[$this->request->params['named']
['city']]); else $city = '';
}
调试时执行变量转储而不是打印。通知上说是关于字符串偏移的。尝试将其类型转换为integerTry,以利用“现代”CakePHP特性,而不是避免使用它。不要使用命名参数,使用查询字符串和query()访问它。如果必须使用命名参数,请首先检查是否存在:
!空($this->request->params['named']['city'])
等。