Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

strpos. Не могу понять, что за ошибка.

334
03 декабря 2006 года
HexEdit
809 / / 27.07.2006
Я использую замену в тексте, чтото вроде этого:
Код:
while ((($subs_start = strpos($rettext, "{", $pos)) != 0) && (($subs_end = strpos($rettext, "}", $subs_start)) != 0)) {
 $subs = substr($rettext, $subs_start + 1, $subs_end - $subs_start - 1);
 if (eregi("[[:alnum:]]+(\.[[:alnum:]]+)*", $subs)) {
  $labels = explode(".", $subs);
  while(list($index, $label) = each($labels)) {
   if ($index == 0) $val = $GLOBALS[$label];
   else $val = $val[$label];
  }
  $rettext = substr_replace($rettext, $val, $subs_start, $subs_end - $subs_start + 1);
  $pos = $subs_end + 1;
 }
}

обычно с пустой строкой (ту которую искать) проблем не было, но в одном месте стала появляться ошибка Offset not contained in string. Что она означает и изза чего она происходит никак не могу понять...
12
03 декабря 2006 года
alekciy
3.0K / / 13.12.2005
Ну во-первых стоило бы упомянуть, в какой же строке ошибка.
Второе. А если '{' в обрабатываемой строке нет? Ты в курсе, что strpos вернет тогда false? Понятно, что ты на != 0 надеешся, но лично бы !== false сделал.
Третье. А алгоритм пересмотреть не думал? Больше уж у тебя тут понаворочено с кучей переменных которые возможно и не нужны. Хотя конечно может в контексте всего скрипта это и нужно, но все же сомневаюсь. Регялярки будут и компактнее и удобнее. Несмотря даже на тормознутость.
8
03 декабря 2006 года
mfender
3.5K / / 15.06.2005
Сюда же добавлю излюбленное "ereg в PHP скоро не будет, поэтому используйте preg"
15
03 декабря 2006 года
shaelf
2.7K / / 04.05.2005
Дополню, в 6 версии)
334
04 декабря 2006 года
HexEdit
809 / / 27.07.2006
[quote=alekciy]Ну во-первых стоило бы упомянуть, в какой же строке ошибка[/quote]
я и пытался понять, где, нашел, ошибка была в while ((($subs_start = strpos($rettext, "{", $pos)) != 0) ....... Разобрался, поставил вместо $pos - 0. $pos было лишним. И изза него и ошибка была.
[quote=alekciy]Второе. А если '{' в обрабатываемой строке нет? Ты в курсе, что strpos вернет тогда false? Понятно, что ты на != 0 надеешся, но лично бы !== false сделал.[/quote]
Спасибо, про false незнал.
[quote=alekciy]Третье. А алгоритм пересмотреть не думал? Больше уж у тебя тут понаворочено с кучей переменных которые возможно и не нужны. Хотя конечно может в контексте всего скрипта это и нужно, но все же сомневаюсь. Регялярки будут и компактнее и удобнее. Несмотря даже на тормознутость.[/quote]
Если про это:
 
Код:
while(list($index, $label) = each($labels)) {
 if ($index == 0) $val = $GLOBALS[$label];
 else $val = $val[$label];
}

то тут врядли получится через регулярки. У меня здесь последовательность, например {page.title} наменяется на значение глобальной переменной (вернее элемента массива) $page["title"]
334
04 декабря 2006 года
HexEdit
809 / / 27.07.2006
Кстати про preg тоже спасибо, буду иметь ввиду.
12
04 декабря 2006 года
alekciy
3.0K / / 13.12.2005
Цитата: HexEdit

Если про это:

то тут врядли получится через регулярки. У меня здесь последовательность, например {page.title} наменяется на значение глобальной переменной (вернее элемента массива) $page["title"]


Не только про это. Я вообще о всем приведенном тут коде.
А мне вот думается получится. Тем более, что я так понимаю у тебя эти данные укладываются в определенный шаблон /{[a-z\.]+}/i

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог