PHP: неопределенное смещение

На некоторых страницах я получаю сообщение об ошибке:

PHP Примечание: Неопределенное смещение: 1 в /var/www/example.com/includes/head.php в строке 23

Вот код:

if ($r) { list($r1, $r2)=explode(" ", $r[0],2); $r1 = mb_strtolower($r1); $r3 = " "; $r2 = $r3.$r2; $r[0] = $r1.$r2; $page_title_f = $r[0]." some text"; $page_title_s = "some text "; $page_title = $page_title_s.$page_title_f; } 

Строка 23 с ошибкой:

 list($r1, $r2)=explode(" ", $r[0],2); 

Не могли бы вы помочь понять, что может быть проблемой?

Обновить

Спасибо всем за помощь! Я частично решил проблему.

$r – строка в базе данных. Сценарий берет строку и начинает манипулировать. Преобразует прописные буквы в нижний регистр. И, как я понимаю, строка должна иметь пробел, иначе выдается сообщение об ошибке «Undefined offset». Поскольку скрипт пытается найти первое пространство, а затем объединить слово перед первым пространством и пространство вместе со всем, что появляется после пробела. (: Я не понимаю, почему он это делает, и нет выхода из этой ситуации, если пространство в строке нет, он просто выдает ошибку.): В общем, это очень старый и плохой веб-магазин движка под названием Shop- Сценарий. Опубликуйте полный список файлов, возможно, он станет более понятным.

http://pastebin.com/Pz1TKpr3

Неопределенная ошибка индекса, которую вы получаете, заключается в том, что смещение, которое вы пытаетесь взорвать в переменной ( $r ), не существует.

Вы можете проверить, что такое $r , выполнив следующие действия:

 print_r($r); 

или

 var_dump($r); 

Чтобы отладить эту проблему, вам нужно показать, что такое $r .

Но предполагать, что ваша переменная $r – это строка, которую вы пытаетесь взорвать, но вы пытаетесь получить к ней доступ в виде массива.

Что произойдет, если вы взорвите его вот так:

 list($r1, $r2) = explode(' ', $r, 2); 
 list($r1, $r2) = explode(" ", $r[0],2); 

При наличии двух переменных, list() понадобится массив с не менее чем двумя элементами.
Однако, поскольку указанная вами ошибка указывает, ваш вызов explode() кажется, возвращает массив только с одним элементом.

Вам нужно будет проверить содержимое $r[0] чтобы убедиться, что на самом деле он содержит ваш разделительный символ или вручную назначить $r1 и $r2 с проверками работоспособности.

Пытаться:

 $words = explode(' ', $r[0], 2); $r1 = isset($words[0]) ? $words[0] : ''; $r2 = isset($words[1]) ? $words[1] : ''; 

Если $r[0] не содержит 2 слова, ваш код получит ошибку, потому что explode() вернет массив только с одним элементом, и вы не можете назначить его двум переменным. Этот код проверяет, существует ли слово, прежде чем пытаться его назначить.

Мой ответ не относится к вашему коду. Для других, кто получает эту ошибку при попытке использовать определенные элементы массива, которые вы создали, попробуйте индексировать свои элементы при создании самого массива. Это поможет вам взорвать / распечатать определенный элемент / сделать все, что угодно, с массивом.