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
Форумы портала PHP.SU :: Версия для печати :: substr_count ищет не все вхождения
Форумы портала PHP.SU » » Вопросы новичков » substr_count ищет не все вхождения

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

1. kir55rus - 19 Февраля, 2013 - 17:29:09 - перейти к сообщению
Здравствуйте

есть строка:
ABABAB

substr_count('ABABAB', 'ABAB') выдаст 1, хотя на самом деле там 2 подстроки

ABABAB и ABABAB

то есть эти подстроки пересекаются
Что посоветуете, как посчитать количество подстрок?
2. OrmaJever - 19 Февраля, 2013 - 17:39:49 - перейти к сообщению
помоему пересекающиеся строки не посчитать. Хотя...
3. kir55rus - 19 Февраля, 2013 - 17:42:43 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. function xcount($str, $pat, $c=0){
  2.         while(($n = strpos($str, $pat)) !== false){
  3.                 $c++; $str = substr($str, $n+1);
  4.         }
  5.         return $c;
  6. }


Вот так?
4. OrmaJever - 19 Февраля, 2013 - 17:48:57 - перейти к сообщению
отличный вариант
5. kir55rus - 19 Февраля, 2013 - 17:53:21 - перейти к сообщению
но если строка большая, то это займет много времени..
Нет ничего получше?
6. esterio - 19 Февраля, 2013 - 18:05:51 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. function xcount($str, $pat)
  2. {
  3.         return count(explode($pat, $str));
  4. }

?
7. kir55rus - 19 Февраля, 2013 - 18:17:05 - перейти к сообщению
тогда даже если вхождение одно, будет ответ 2.. не совсем подходит
8. OrmaJever - 19 Февраля, 2013 - 19:02:57 - перейти к сообщению
во-первых других вариантов нет, во вторых врядле будет уж слишком долго, это просто строка.
9. DelphinPRO - 19 Февраля, 2013 - 20:42:38 - перейти к сообщению
kir55rus пишет:
но если строка большая, то это займет много времени..
Нет ничего получше?
не стоит задумываться о таких мелочах на этом этапе написания программы. Вот когда будет готово, - прогоните профайлером на реальных данных, найдете узкие места, тогда и будете думать как решить проблему (если она будет).

 

Powered by ExBB FM 1.0 RC1