Ошибка смещения неинициализированной строки

Почему я получаю ошибку неинициализированной строки, я не могу понять?

Вот моя функция:

function show_site_name($url,$lenght)
{
$name='';
$i=0;
$slash=0;
while($slash<3 && $i<=$lenght)
{
if($url[$i]=='/') $slash++;
if($url[$i]!='/' && $slash==2) $name.=$url[$i];
$i++;
}
return($name);
}

Редакция:
Я получаю сообщение об ошибке «Смещение неинициализированной строки» в этих двух строках:

    if($url[$i]=='/') $slash++;
if($url[$i]!='/' && $slash==2) $name.=$url[$i];

-1

Решение

Функция довольно глупая. PHP предлагает хорошие нативные функции для парсинг URL. Кроме того, я предполагаю, «длина» — это длина первого аргумента? Что, конечно, можно получить с strlen,

show_site_name('http://www.example.com', strlen('http://www.example.com'));

Приведет к Uninitialized string offset: 22,

show_site_name('http://www.example.com', strlen('http://www.example.com')-1);

Выше, вероятно, то, что вы хотите. Вариант базы ноль, а не один.

if($url[$i]=='/') $slash++;

Строка выше, где вы превышаете смещение строки. Плохая логика Вы можете исправить код и избежать его или справиться с ним isset, Доверяйте своему журналу ошибок.

ОБНОВИТЬ:

Вы можете избежать этого, передавая вменяемые аргументы, как я показал. Или измените его на:

if (isset($url[$i])) {
if($url[$i]=='/') $slash++;
} else {
return $name;
}

Но опять же, это просто глупо.

Если вы настаиваете на этом, давайте назовем это для целей обучения. Почему бы не сделать:

function show_site_name($url)
{
$lenght = strlen($url) -1;
...

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

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]