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 это строка в базе данных. Скрипт берет строку и начинает манипулировать. Преобразует прописные буквы в строчные. И я так понимаю, в строке должен быть пробел, иначе вылазит ошибка "Неопределенное смещение". Потому что скрипт пытается найти первый пробел, а затем объединить слово до первого пробела и пробел вместе со всем, что стоит после пробела. (: я не понимаю, зачем он это делает и нет выхода из этой ситуации, если пробела в строке нет, он просто выдает ошибку. ): В общем, это очень старый и плохой движок интернет-магазина под названием Shop- Скрипт. Выложите полный листинг файла, может будет понятнее.

http://pastebin.com/Pz1TKpr3


person n1k1c4    schedule 08.08.2014    source источник
comment
Каково значение $r?   -  person sectus    schedule 08.08.2014
comment
Можете ли вы указать значение $r[0] - поскольку оно дает неопределенное смещение 1 (а не 0, как в некоторых других комментариях) - вполне вероятно, что оно не может быть взорвано ' ' (или пробел, который вы видите визуально, не является строго символом ' '. Изменить : Я предполагаю, что вы имели в виду, что строка с ошибкой должна быть там, где она есть, а не после строки $r[0] = $r1.$r2;?   -  person LuckySpoon    schedule 08.08.2014
comment
возможный дубликат Reference. Что означает эта ошибка в PHP?   -  person Sverri M. Olsen    schedule 08.08.2014


Ответы (4)


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

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

print_r($r);

or

var_dump($r);

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

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

Что будет, если взорвать вот так:

list($r1, $r2) = explode(' ', $r, 2);
person Darren    schedule 08.08.2014
comment
Предупреждение: функцияexpore() ожидает, что параметр 2 будет строкой, массивом, указанным в /var/www/example.com/includes/head.php в строке 23. - person n1k1c4; 08.08.2014
comment
@ n1k1c4 как выглядят данные $r? - person Darren; 08.08.2014
comment
Просто простой текст. Одно-два слова. - person n1k1c4; 09.08.2014

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

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

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

person Cobra_Fast    schedule 08.08.2014

Пытаться:

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

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

person Barmar    schedule 08.08.2014

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

person Jeffry Louis    schedule 02.11.2017