[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: substr_count работает не как мне хотелось бы
p.pavluxa
Здравствуйте.

$myStr = "0,1,1,1,0,1,1,1,0";
echo substr_count( $myStr, "0,1,1,1,0" ); // 1

Как видно результат 1, а мне нужно что бы он был 2, так как такая строка встречается там два раза. Как быть в этом случае?



Спустя 6 минут, 23 секунды (26.07.2012 - 18:03) neadekvat написал(а):
Ты в документацию загляни. Все правильно работает.

Спустя 2 минуты, 45 секунд (26.07.2012 - 18:06) p.pavluxa написал(а):
Я понимаю что он работает правильно, но не так как хочется мне ) Может есть альтернативы?

Спустя 49 секунд (26.07.2012 - 18:07) dadli написал(а):
p.pavluxa
$myStr = "0,1,1,1,0,0,1,1,1,0";

в етом случае будит 2

Спустя 1 минута, 9 секунд (26.07.2012 - 18:08) p.pavluxa написал(а):
То есть предлагаете заменить в строке все нули на два нуля?

Спустя 27 секунд (26.07.2012 - 18:08) Winston написал(а):
Цитата (p.pavluxa @ 26.07.2012 - 17:57)
так как такая строка встречается там два раза

Неужели?

Спустя 42 секунды (26.07.2012 - 18:09) neadekvat написал(а):
Мало ли что тебе хочется.
А max() почему-то ищет максимум, когда я хочу минимум. Что за фигня?

Я лично не врубаюсь, что тебе нужно.

Спустя 1 минута, 17 секунд (26.07.2012 - 18:10) p.pavluxa написал(а):
Та я Вам говорю ребята, просто мне нужно посчитать количество комбинаций 0,1,1,1,0 которое встречается в строке.

Спустя 1 минута, 42 секунды (26.07.2012 - 18:12) Winston написал(а):
Цитата (p.pavluxa @ 26.07.2012 - 18:10)
Та я Вам говорю ребята, просто мне нужно посчитать количество комбинаций 0,1,1,1,0 которое встречается в строке.

запусти цикл, и на каждой итерации прибавляй +1, для параметра offset в substr_count

Спустя 2 минуты, 28 секунд (26.07.2012 - 18:14) neadekvat написал(а):
Цитата (p.pavluxa @ 26.07.2012 - 19:10)
Та я Вам говорю ребята, просто мне нужно посчитать количество комбинаций 0,1,1,1,0 которое встречается в строке.

Так возьми и вручную посчитай. Она встречается ровно один раз.

Спустя 1 минута, 57 секунд (26.07.2012 - 18:16) p.pavluxa написал(а):
$myStr = "0,1,1,1,0,1,1,1,0";

первый раз начинается на индексе 0 и заканчивается на 4
а второй раз начинается на индексе 4 и заканчивается на 8

PS: всем спасибо за внимание. Проблема решена функцией str_replace( '0', '0,0', $myStr ); после неё считается как нада )

Спустя 2 минуты, 41 секунда (26.07.2012 - 18:19) neadekvat написал(а):
Цитата (p.pavluxa @ 26.07.2012 - 19:16)
первый раз начинается на индексе 0 и заканчивается на 4
а второй раз начинается на индексе 4 и заканчивается на 8

Ответ неверный.
Уже подсчитанные символы заново никто подсчитывать не будет.

Цитата (p.pavluxa @ 26.07.2012 - 19:16)
PS: всем спасибо за внимание. Проблема решена функцией str_replace( '0', '0,0', $myStr ); после неё считается как нада )

Что за бред? Посмотри, какая у тебя строка на выходе получается.

Спустя 2 минуты, 59 секунд (26.07.2012 - 18:22) p.pavluxa написал(а):
0,0,1,1,1,0,0,1,1,1,0,0

Моя основная задача не сохранить структуру строки, а правильно посчитать скоко в ней трёхпалубников. Поэтому мой мега самый суперский метод крут )

Спустя 2 минуты, 4 секунды (26.07.2012 - 18:24) dadli написал(а):
p.pavluxa
мне кожется ви ето хотите, может есть более оптималние решеня

$myStr = "0,1,1,1,0,1,1,1,0"; 
$str = "0,1,1,1,0";
$count = 0;


for ($i = 0; $i <= strlen($myStr) - strlen($str); $i=$i+1) {
if ( substr($myStr,$i,strlen($str)) == $str) {
$count = $count + 1;
}
}


echo $count;

Спустя 1 минута, 12 секунд (26.07.2012 - 18:25) p.pavluxa написал(а):
Да!!! Это именно то что мне нужно! Вы Сен-сей программирования!
А это будет работать даже быстрей чем я предложил?

Спустя 4 минуты, 3 секунды (26.07.2012 - 18:29) neadekvat написал(а):
Вот это:
0,1,1,1,0,1,1,1,0
И вот это:
0,0,1,1,1,0,0,1,1,1,0,0
Совершенно разные строки, не находишь?
Откуда столько нулей взялось? С какой радости? Твой код подсчета сработает только на ограниченном количестве комбинаций.
Контрпример.
1,0,0,1,1,0,0,1,1
Выводит 0, а должны бы 2, нэ?

Спустя 4 минуты, 19 секунд (26.07.2012 - 18:34) p.pavluxa написал(а):
Ты меня запутал.

Смотри, вы взяли с нашего игрового поля первую строчку. В ней кораблики стоят вот так:
0,1,1,0,1,1,1,0,1,0

Мне нужно посчитать скоко тут однопалубных двухпалубных и трёх палубных.
Я возьму все нули заменю на '0,0' в результате получу строку :
0,0,1,1,0,0,1,1,1,0,0,1,0,0

Теперь я хочу узнать скоко тут однопалубных, беру пишу :
substr_count( строка, '0,1,0' );
Двухвалубных substr_count( строка, '0,1,1,0' );
и т.д. Всё работает правильно же

Спустя 4 часа, 22 минуты, 47 секунд (26.07.2012 - 22:56) inpost написал(а):
регуляркой через ++, не помню точного названия. И отменяешь жадный поиск.

Спустя 1 час, 5 минут, 5 секунд (27.07.2012 - 00:01) Invis1ble написал(а):
$myStr = "0,1,1,1,0,1,1,1,0";
preg_match_all('#(?=0,1,1,1,0)#', $myStr, $matches);
echo count($matches[0]);

Спустя 38 минут, 19 секунд (27.07.2012 - 00:40) neadekvat написал(а):
А по-моему, это фигня какая-то.
Зачем придумали матрицы? Чтобы в 10-ом формате через запятую числа в ряд записывать?

Спустя 17 минут, 18 секунд (27.07.2012 - 00:57) Invis1ble написал(а):
Цитата
А по-моему, это фигня какая-то.
Зачем придумали матрицы? Чтобы в 10-ом формате через запятую числа в ряд записывать?

согласен, костыльно получается как-то )

PS. Оффтоп
Вспомнил, как писал бота под свою же капчу (которая на конкурсе была). Принцип работы - регулярки с нулями и единицами smile.gif Звучит смешно, но таким образом удалось добиться ~100% эффективности при максимальной скорости работы скрипта smile.gif

Спустя 12 часов, 49 минут, 3 секунды (27.07.2012 - 13:46) p.pavluxa написал(а):
Спасибо, это именно то что я хотел увидеть :-)

Номинация самый щедрый и не ленивый программист достается - Invis1ble !

PS: по поводу бота согласен, я тоже делал бота который гадает капчу, преобразовывал её в матрицу из 0 и 1 и далее матрицу уже расчитывает, работало на ура.

Спустя 19 часов, 6 минут, 11 секунд (28.07.2012 - 08:52) inpost написал(а):
p.pavluxa
Я тебе тоже дал полный ответ, кроме готового кода. Чтобы его написать необходимо было тебе открыть мануал и почитать то, о чём я говорю smile.gif
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.