Сегодня я обновился до 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);
Поэтому я подозреваю, что всякий раз, когда поля кавычек пусты, это предупреждение появляется. Есть ли способ, которым я могу это исправить, когда поля пусты?
Вам нужно убедиться, что $meta
– это тип массива. Предупреждение явно сообщает вам, что $meta
кажется string
а не array
Illegal string offset ^^^^^^
Чтобы избежать этой ошибки, вы также можете проверить необходимые поля
for($i = 0; $i < 3; $i++) { if ( !is_array($meta) || !array_key_exists('quote'. ($i+1), $meta) ){ continue; } // your code }
Если $meta
имеет значение null
когда нет данных для обработки:
if( !is_null($meta) ){ for($i = 0; $i < 3; $i++) { // ... } }
При необходимости вы сможете сделать больше проверок. Это зависит от того, для чего get_post_meta()
функция get_post_meta()
.