PHP警告:非法字符串偏移'字段'


PHP warning: Illegal string offset 'field'

我不明白为什么这个代码给php 5.4警告?我怎样才能解决这个问题?

 function load()
        {
                for ($i = 0, $n = sizeof($messages); $i < $n; $i++)
                {
                    $this->add($messages[$i]['field'], $messages[$i]['type']);
                }
        }
    function add($field, $type)
        {
            $this->messages[] = array('field' => $field, 'type' => $type);
        }
for ($i = 0, $n = sizeof($messages); $i < $n; $i++) { ... }
$this->add($messages[$i]['field'], $messages[$i]['type']);

$messages在当前作用域中不存在。相反,您应该使用$this->messages(可能已声明为属性)。

要记住的一件事是,如果您的数组具有正确的索引,那么最可能从0开始作为第一个元素。而sizeof给出了元素的数量。例如,数组中的元素10的索引为[9]。为了解决这个问题,你可以像这样对极限做- 1:

for ($i = 0, $n = sizeof($messages) - 1; $i < $n; $i++){ ... }

也就是说,Unixarmy的解决方案更好,但这绝对是要记住的事情。否则每次对于最后一个元素都会得到至少1个错误