Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Определить наличие слова в строке

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
murich
Отправлено: 17 Сентября, 2007 - 18:49:40
Post Id



Новичок


Покинул форум
Сообщений всего: 19
Дата рег-ции: Авг. 2007  


Помог: 0 раз(а)




Есть допустим строка
PHP:
скопировать код в буфер обмена
  1.  $str = 'зеленые, очень зеленые глаза разьяренного хомячка';

Мне нужно узнать сколько раз встречается в ней некоторая последовательность символов, тоесть какое- либо слово.
Тоесть та функция которая при написании в её аргумантах (хомячка, $str) вернет 1,
при аргументах (монитор, $str) вернет 0, при аргументах (зеленые, $str) вернет 2.
Пожалуйста, подскажите что за функция, если есть такая, ну а если нету - подскажите чтонибудь похожее, или как сделать такое.


-----
Just be a Person
 
 Top
EuGen Администратор
Отправлено: 17 Сентября, 2007 - 19:27:19
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




первое, что приходит в голову: (этот пример настолько прост, что наверное даже не имеет смысла его в функцию выносить, но я вынес для наглядности)
PHP:
скопировать код в буфер обмена
  1.  
  2. function str_count($str, $source)
  3. {
  4.         $arr=explode($str,$source);
  5.         return(count($arr)-1);
  6. }
  7.  

Например:
PHP:
скопировать код в буфер обмена
  1.  
  2. $str = 'зеленые, очень зеленые глаза разьяренного хомячка';
  3. echo(str_count('хомячка', $str));
  4. echo("\\n");
  5. echo(str_count('зеленые', $str));
  6.  

вернет:

это не оптимальные вариант, наверное, можно и проще... (или оптимальнее, так как все-таки массив промежуточный используется)


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
murich
Отправлено: 17 Сентября, 2007 - 19:43:56
Post Id



Новичок


Покинул форум
Сообщений всего: 19
Дата рег-ции: Авг. 2007  


Помог: 0 раз(а)




Благодарю.


-----
Just be a Person
 
 Top
valenok Модератор
Отправлено: 17 Сентября, 2007 - 21:44:17
Post Id



Здесь могла бы быть ваша реклама


Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006  
Откуда: Israel


Помог: 3 раз(а)




EuGen
товарищ ужис, но оригинально. мне понравилось

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  function str_count($str, $source)
  3.  {
  4.         $arr=explode($str,$source);
  5.         return(count($arr)-1);
  6.  }
  7.  
  8.  
  9.  function str_count2($str, $source)
  10.  {
  11.                 preg_match_all("/".addslashes($str)."/", $source, $matches);
  12.                 return(count($matches[0]));
  13.  }
  14.  


For 50 runs of script with str_count() average time was: 0.150538878441
For 50 runs of script with str_count2() average time was: 0.136740336418

Обртим внимание ещё и на addslashes
часто с данными ещё нужно делать кой какие операции
поэтому addslahes или mysql_escape_string
и если данные обрабатывать при получении экономим массу времени и сил.
Это для нашей строки. с хомячками.
А если строка чуть чуть подлиннее -
разница получается на лицо, хотя даже 0,02 секунды это много

Так что пользуйтесь на здоровье str_count2
или если и вам лень редактировать код, наплеавть на пользователя и придерживаетесь политики майкрософта, то оставьте первый который вы уже списали =)
Я бы точно не стал бы менять если у вас строки из пары слов


-----
Truly yours, Sasha.
 
My status
 Top
evgenijj
Отправлено: 17 Сентября, 2007 - 21:47:43
Post Id



Участник


Покинул форум
Сообщений всего: 1212
Дата рег-ции: Авг. 2006  
Откуда: Москва


Помог: 10 раз(а)




EuGen пишет:
этот пример настолько прост, что наверное даже не имеет смысла его в функцию выносить


The captain wore his cap and cape proudly as he sat listening to the recap of how his crew saved the men from a capsized vessel.
 
 Top
valenok Модератор
Отправлено: 17 Сентября, 2007 - 21:49:42
Post Id



Здесь могла бы быть ваша реклама


Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006  
Откуда: Israel


Помог: 3 раз(а)




=)


-----
Truly yours, Sasha.
 
My status
 Top
EuGen Администратор
Отправлено: 18 Сентября, 2007 - 11:37:07
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Заметьте я сразу же оговорился, что это не оптимальный пример. А только какое-то решение задачи. причем первое пришедшее в голову
Так что да, конечно можно использовать preg_match_all и т.п. (можно наверное и еще оптимальнее как-то), но я за скоростью не гнался.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
valenok Модератор
Отправлено: 18 Сентября, 2007 - 20:53:15
Post Id



Здесь могла бы быть ваша реклама


Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006  
Откуда: Israel


Помог: 3 раз(а)




Я вас не обвиняю =)
Но идея мне очень понравилась =)


-----
Truly yours, Sasha.
 
My status
 Top
murich
Отправлено: 19 Сентября, 2007 - 15:43:04
Post Id



Новичок


Покинул форум
Сообщений всего: 19
Дата рег-ции: Авг. 2007  


Помог: 0 раз(а)




Спасибо, буду использовать второй совет.


-----
Just be a Person
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB