0

我今天升级到 PHP 5.4,收到一些奇怪的警告:

Warning: Illegal string offset 'quote1' in file.php on line 110
Warning: Illegal string offset 'quote1_title' in file.php on line 111

这些行是代码的这一部分:

for($i = 0; $i < 3; $i++) {
    $tmp_url = $meta['quote'. ($i+1)];
    $tmp_title = $meta['quote' . ($i+1) .'_title'];

    if(!empty($tmp_url) || !empty($tmp_title)) {
        $quotes[$src_cnt] = array();
        $quotes[$src_cnt]['url'] = $tmp_url;
        $quotes[$src_cnt]['title'] = $tmp_title;
        $src_cnt++;
    }
}

所以$tmp_url$tmp_title线。

为什么我会收到这个奇怪的警告,解决方案是什么?

更新

此代码被用作 Wordpress 插件。$meta 包括:

$meta = get_post_meta($post->ID,'_quote_source',TRUE);

所以我怀疑每当引号字段为空时,都会出现此警告。当字段为空时,有什么办法可以解决这个问题?

4

2 回答 2

7

您需要确保它$meta实际上是数组类型。警告明确告诉您,这$meta似乎是 astring 而不是array

Illegal string offset
        ^^^^^^

为避免此错误,您还可以检查所需字段

for($i = 0; $i < 3; $i++) {
    if ( !is_array($meta) || !array_key_exists('quote'. ($i+1), $meta) ){
         continue;
    }
    // your code
}
于 2013-04-28T15:13:42.473 回答
0

如果$meta没有null数据需要处理:

if( !is_null($meta) ){
    for($i = 0; $i < 3; $i++) {
        // ...
    }
}

如有必要,您应该能够进行更多检查。这取决于该get_post_meta()函数旨在返回什么。

于 2013-04-28T15:23:18.647 回答