Модераторы: Aliance, skyboy, MoLeX, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> поиск последней позиции слова в строке, strrpos не подходит 
:(
    Опции темы
Prompt
Дата 19.11.2006, 21:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 22.2.2006

Репутация: нет
Всего: нет



На сервере стоит PHP4. Мне нужно найти последнюю позицию слова в строке. Функция strrpos не подходит, т.к. ищет последнюю позицию только первого символа слова (это в php4), а не всего слова. И что же делать smile ?
PM MAIL   Вверх
check
Дата 19.11.2006, 22:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 610
Регистрация: 3.4.2006

Репутация: нет
Всего: 23



Можно реверснуть строку с помощью strrev(), а потом заюзать strstr().

Возможно есть какая-то функция которая находит последнее вхождение подстроки в строку, не знаю.
PM MAIL   Вверх
check
Дата 20.11.2006, 01:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 610
Регистрация: 3.4.2006

Репутация: нет
Всего: 23



Нет, это я ступил.  
Можно сделать например так
Код

$rev_str = strrev($str); 
$rev_word = strrev($rev_str);
$last_pos = strlen($str) - (strpos($rev_str, $rev_word) + strlen($needle) + 1);

PM MAIL   Вверх
SelenIT
Дата 20.11.2006, 02:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 8
Всего: 401



А так не проще ли будет:
Код

function strrpos4($str, $needle) {
  $lastpos = -1;
  while(($new = strpos($str, $needle, $lastpos+1)) !==false) { $lastpos = $new; }
  return ($lastpos==-1) ? false : $lastpos;
}



--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
smartov
Дата 20.11.2006, 11:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


свой собственный
****


Профиль
Группа: Экс. модератор
Сообщений: 4225
Регистрация: 2.2.2006
Где: NJ

Репутация: 4
Всего: 259



Prompt, а можно узнать последняя позиция слова это как?
Последняя позиция последнего символа этого слова? Или какого символа?
И что мешает тебе получить любое из вышеперечисленного если с помощью strrpos ты узнаешь позицию первого симовла этого слова, а длина слова тебе известна?
Короче вопрос мутный и неясно что ты собственно хотел.
PM MAIL   Вверх
Prompt
Дата 20.11.2006, 19:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 22.2.2006

Репутация: нет
Всего: нет



Из мануала.
Код

int strrpos ( string haystack, string needle [, int offset] )
Возвращает позицию последнего вхождения needle в строку haystack. В PHP 4 используется только первый символ строки needle.

Т.е.
 
Код

echo strrpos("rigth apple alert ", "apple");
//stdout : 12, а не как хотелось бы 6

Я думаю все предельно ясно.

PM MAIL   Вверх
-=Ustas=-
Дата 20.11.2006, 20:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


Профиль
Группа: Участник Клуба
Сообщений: 2222
Регистрация: 21.1.2005
Где: Краснодар

Репутация: 6
Всего: 69



Prompt, а что тебе мешает сделать так:
Код

$string = 'apple';
$pos = (strrpos('rigth apple alert ', $string) + strlen($string));
echo $pos;



--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
Prompt
Дата 21.11.2006, 12:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 22.2.2006

Репутация: нет
Всего: нет



В этом случае $pos будет равен 17. Дело в том, что strrpos ищет последнюю букву a  в переданной строке, а не последнее нужное мне слово. 
В php4 
Код

int strrpos ( string haystack, string needle [, int offset] )

в параметре needle берется только первый символ, а все остальное отбрасывается. Так что 
Код

$val1 = strrpos("rigth apple alert", "apple");
$val2 = strrpos("rigth apple alert", "alert");
echo ($val1 == $val2);
//stdout: 1



PM MAIL   Вверх
smartov
Дата 21.11.2006, 14:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


свой собственный
****


Профиль
Группа: Экс. модератор
Сообщений: 4225
Регистрация: 2.2.2006
Где: NJ

Репутация: 4
Всего: 259



Prompt, хм. Истину глаголешь.
Тогда или пиши свою, например как предложил Check, если её сократить
Код

function real_strrpos($haystack, $needle)
{
return ( strlen($haystack) - (strpos(strrev($haystack), strrev($needle)) + strlen($needle)) );
}

Или же заюзай unicode-аналоги функций (должно стоять расширение mbstring).
Например mb_strrpos вернет тебе то, что надо и к тому же будет корректно работать с UTF-8.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Тексты | Следующая тема »


 




[ Время генерации скрипта: 0.0905 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.