На некоторых страницах я получаю сообщение об ошибке:
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()
вернет массив только с одним элементом, и вы не можете назначить его двум переменным. Этот код проверяет, существует ли слово, прежде чем пытаться его назначить.
Мой ответ не относится к вашему коду. Для других, кто получает эту ошибку при попытке использовать определенные элементы массива, которые вы создали, попробуйте индексировать свои элементы при создании самого массива. Это поможет вам взорвать / распечатать определенный элемент / сделать все, что угодно, с массивом.