![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| rodendron |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 152 Регистрация: 22.3.2005 Репутация: нет Всего: нет |
Добрый вечер,
Есть строка такого типа: Кор#ова п#ошла в м#агаз#ин. Как оптимальнее всего подсчитать количество символов # в строке? (в данном случае их 3) |
|||
|
||||
| mr.Anderson |
|
|||
![]() iOS Lead Developer ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3374 Регистрация: 20.12.2004 Где: далеко Репутация: 1 Всего: 128 |
Легко.
|
|||
|
||||
| ZlojEzh |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 285 Регистрация: 8.10.2005 Где: Киев, Украина Репутация: 10 Всего: 15 |
substr_count()
|
|||
|
||||
| mr.Anderson |
|
|||
![]() iOS Lead Developer ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3374 Регистрация: 20.12.2004 Где: далеко Репутация: 1 Всего: 128 |
Надо же. А я и не знал про такую функцию. Полезная штука.
|
|||
|
||||
| Mal Hack |
|
|||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: 122 Всего: 261 |
Да. Хотя, вариант while( pos() !== FALSE ) $c++;
Был бы оптимальнее. |
|||
|
||||
| SelenIT |
|
|||
![]() баг форума ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3996 Регистрация: 17.10.2006 Где: Pale Blue Dot Репутация: 32 Всего: 401 |
Mal Hack, оптимальнее чем for или чем встроенная функция? И почему?
А если бы не было встроенной функции, то можно было бы сделать еще так: $howmuch = count(explode($substr ,$str)) - 1; -------------------- Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму! |
|||
|
||||
| Mal Hack |
|
|||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: 122 Всего: 261 |
Чем for, конечно. Ну ты посчитай хотя бы кол-во твоих итерация - n, у меня же - столько, сколько символов. Расход памяти большой |
|||
|
||||
| SelenIT |
|
|||
![]() баг форума ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3996 Регистрация: 17.10.2006 Где: Pale Blue Dot Репутация: 32 Всего: 401 |
Mal Hack, сорри, я не сразу понял идею алгоритма за схематической записью (не опознал под "pos()" strpos с 3-м параметром). Действительно, так лучше.
Насчет расхода памяти в моей строчке согласен, но она вообще не была серьезным вариантом, ведь есть же встроенная ф-ция -------------------- Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму! |
|||
|
||||
| Mal Hack |
|
|||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: 122 Всего: 261 |
||||
|
||||
| SelenIT |
|
|||
![]() баг форума ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3996 Регистрация: 17.10.2006 Где: Pale Blue Dot Репутация: 32 Всего: 401 |
<sorry for="offtop">...тогда уж delPHPi
-------------------- Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму! |
|||
|
||||
| rodendron |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 152 Регистрация: 22.3.2005 Репутация: нет Всего: нет |
Спасибки, друзья, огромное.
На этом тема закрыта. А я чего-то не мог найти на php.net стандартную ф-ию(( |
|||
|
||||
| ZlojEzh |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 285 Регистрация: 8.10.2005 Где: Киев, Украина Репутация: 10 Всего: 15 |
еще чуточку не по теме...
не надо забывать, что strpos тоже пробегается по строке и хоть это и встроенная функция - сложность алгоритма получится O(n*m) где n - длина строки, а m - количество искомых символов в ней |
|||
|
||||
| Mal Hack |
|
|||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: 122 Всего: 261 |
Тут получается двоякая ситуация. При кол-ве символов, которые есть в строке стремящимся к длине строки, возможно быстрее будет и for, а при стремлении оных к нулю - str_pos.
Добавлено @ 14:54 ИМХО, вариант с str_pos нагляднее. Но это имхо. |
|||
|
||||
| SelenIT |
|
|||
![]() баг форума ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3996 Регистрация: 17.10.2006 Где: Pale Blue Dot Репутация: 32 Всего: 401 |
Но ведь не по всей строке же, а только со стартового индекса (вычисленного на прошлой итерации) до позиции следующего вхождения, итого в сумме получается, что итоговая сложность все равно O(n), независимо от количества искомых символов. А циклы в PHP сами по себе не шибко быстрые... -------------------- Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму! |
|||
|
||||
![]()
|
| Правила форума "PHP" | |
|
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |