Посчитать кол-во раз повтора строки в переменной на PHP

12
D
На сайте с 10.08.2007
Offline
52
#11

не совсем в тему, но... надо прогонять хотя бы несколько К циклов, чтобы судить о производительности - результат достовернее.

Дмитрий
На сайте с 23.08.2006
Offline
222
#12

dating?, выб сами попробывали бы и увидели бы какая там погрешность будет

Разрабатываю и автоматизирую на php http://jonnyb.ru/
[Удален]
#13
$queryStartTime = microtime(true);
for ( $i = 0; $i < 100; $i++ )
{
$abc='tumsov fdng djfd gdfjgf jgf tumsov fdng djfd gdfjgf jgf tumsov fdng djfd gdfjgf jgf tumsov fdng djfd gdfjgf jgf tumsov fdng djfd gdfjgf jgf tumsov fdng djfd gdfjgf jgf tumsov fdng djfd gdfjgf jgf tumsov fdng djfd gdfjgf jgf
tumsov fdng djfd gdfjgf jgf tumsov fdng djfd gdfjgf jgf tumsov fdng djfd gdfjgf jgf tumsov fdng djfd gdfjgf jgf';

$mas = preg_match_all('/tumsov/', $abc, $matches);
}
$queryEndTime = microtime(true);

echo '<p><i>preg_match_all</i> - ', ($queryEndTime - $queryStartTime), '. ', $mas, ' совпадений</p>';


$queryStartTime = microtime(true);
for ( $i = 0; $i < 100; $i++ )
{
$abc='tumsov fdng djfd gdfjgf jgf tumsov fdng djfd gdfjgf jgf tumsov fdng djfd gdfjgf jgf tumsov fdng djfd gdfjgf jgf tumsov fdng djfd gdfjgf jgf tumsov fdng djfd gdfjgf jgf tumsov fdng djfd gdfjgf jgf tumsov fdng djfd gdfjgf jgf
tumsov fdng djfd gdfjgf jgf tumsov fdng djfd gdfjgf jgf tumsov fdng djfd gdfjgf jgf tumsov fdng djfd gdfjgf jgf';

$mas = count(explode('tumsov', $abc)) - 1;
}
$queryEndTime = microtime(true);

echo '<p><i>count + explode</i> - ', ($queryEndTime - $queryStartTime), '. ', $mas, ' совпадений</p>';


$queryStartTime = microtime(true);
for ( $i = 0; $i < 100; $i++ )
{
$abc='tumsov fdng djfd gdfjgf jgf tumsov fdng djfd gdfjgf jgf tumsov fdng djfd gdfjgf jgf tumsov fdng djfd gdfjgf jgf tumsov fdng djfd gdfjgf jgf tumsov fdng djfd gdfjgf jgf tumsov fdng djfd gdfjgf jgf tumsov fdng djfd gdfjgf jgf
tumsov fdng djfd gdfjgf jgf tumsov fdng djfd gdfjgf jgf tumsov fdng djfd gdfjgf jgf tumsov fdng djfd gdfjgf jgf';

str_replace('tumsov', '', $abc, $mas);
}
$queryEndTime = microtime(true);

echo '<p><i>str_replace</i> - ', $queryEndTime - $queryStartTime, '. ', $mas, ' совпадений</p>';


$queryStartTime = microtime(true);

for ( $i = 0; $i < 100; $i++ )
{
$abc='tumsov fdng djfd gdfjgf jgf tumsov fdng djfd gdfjgf jgf tumsov fdng djfd gdfjgf jgf tumsov fdng djfd gdfjgf jgf tumsov fdng djfd gdfjgf jgf tumsov fdng djfd gdfjgf jgf tumsov fdng djfd gdfjgf jgf tumsov fdng djfd gdfjgf jgf
tumsov fdng djfd gdfjgf jgf tumsov fdng djfd gdfjgf jgf tumsov fdng djfd gdfjgf jgf tumsov fdng djfd gdfjgf jgf';
$needle = 'tumsov';
$needleCount = strlen($needle);
$mas = 0;
$pos = 0;
while ( ( ($pos = strpos($abc, $needle, $pos)) !== false ) )
{
$mas++;
$pos += $needleCount;
}
}
$queryEndTime = microtime(true);

echo '<p><i>strpos</i> - ', $queryEndTime - $queryStartTime, '. ', $mas, ' совпадений</p>';



$queryStartTime = microtime(true);
for ( $i = 0; $i < 100; $i++ )
{
$abc='tumsov fdng djfd gdfjgf jgf tumsov fdng djfd gdfjgf jgf tumsov fdng djfd gdfjgf jgf tumsov fdng djfd gdfjgf jgf tumsov fdng djfd gdfjgf jgf tumsov fdng djfd gdfjgf jgf tumsov fdng djfd gdfjgf jgf tumsov fdng djfd gdfjgf jgf
tumsov fdng djfd gdfjgf jgf tumsov fdng djfd gdfjgf jgf tumsov fdng djfd gdfjgf jgf tumsov fdng djfd gdfjgf jgf';
$needle = 'tumsov';
$needleCount = strlen($needle);
$mas = 0;
$pos = 0;
while ( ( ($pos = strpos($abc, $needle)) !== false ) )
{
$mas++;
$abc = substr($abc, $pos + $needleCount);
}
}
$queryEndTime = microtime(true);

echo '<p><i>strpos + substr</i> - ', $queryEndTime - $queryStartTime, '. ', $mas, ' совпадений</p>';


$queryStartTime = microtime(true);
for ( $i = 0; $i < 100; $i++ )
{
$abc='tumsov fdng djfd gdfjgf jgf tumsov fdng djfd gdfjgf jgf tumsov fdng djfd gdfjgf jgf tumsov fdng djfd gdfjgf jgf tumsov fdng djfd gdfjgf jgf tumsov fdng djfd gdfjgf jgf tumsov fdng djfd gdfjgf jgf tumsov fdng djfd gdfjgf jgf
tumsov fdng djfd gdfjgf jgf tumsov fdng djfd gdfjgf jgf tumsov fdng djfd gdfjgf jgf tumsov fdng djfd gdfjgf jgf';

$mas = substr_count($abc, 'tumsov');
}
$queryEndTime = microtime(true);

echo '<p><i>substr_count</i> - ', $queryEndTime - $queryStartTime, '. ', $mas, ' совпадений</p>';

$queryStartTime = microtime(true);
for ( $i = 0; $i < 100; $i++ )
{
$abc='tumsov fdng djfd gdfjgf jgf tumsov fdng djfd gdfjgf jgf tumsov fdng djfd gdfjgf jgf tumsov fdng djfd gdfjgf jgf tumsov fdng djfd gdfjgf jgf tumsov fdng djfd gdfjgf jgf tumsov fdng djfd gdfjgf jgf tumsov fdng djfd gdfjgf jgf
tumsov fdng djfd gdfjgf jgf tumsov fdng djfd gdfjgf jgf tumsov fdng djfd gdfjgf jgf tumsov fdng djfd gdfjgf jgf';
$mas = 0;
$count = strlen($abc);
$needle = 'tumsov';
$needleCount = 5;
$pos = 0;
for ( $j = 0; $j < $count; $j++ )
{
if ( $abc[$j] == $needle[$pos] )
{
if ( $pos == $needleCount )
{
$mas++;
$pos = 0;
}
else
{
$pos++;
}
}
else
$pos = 0;
}
}
$queryEndTime = microtime(true);

echo '<p><i>user function</i> - ', $queryEndTime - $queryStartTime, '. ', $mas, ' совпадений</p>';
preg_match_all - 0.0056741237640381. 12 совпадений

count + explode - 0.0027198791503906. 12 совпадений

str_replace - 0.0015430450439453. 12 совпадений

strpos - 0.0042989253997803. 12 совпадений

strpos + substr - 0.0072801113128662. 12 совпадений

substr_count - 0.00096297264099121. 12 совпадений

user function - 0.1017599105835. 12 совпадений

Вывод один. RTFM

T
На сайте с 28.06.2007
Offline
82
#14

Вот раздули тему :)

СПАСИБО ВАМ!

Не думал что такие рассуждения начнутся :).

Сделал через substr_count, всё работает :).

Вчера может сонный был, но до ночи искал функцию на phpclub, так и не нашёл. Решил сюда запостить.

Оказывается искал плохо :(. Да и не программист я, так иногда от нечего делать пытаюсь чего-нибудь спрограммировать 😂 силами всего форума :D. Если сюда выложу какой-нибудь скрипт, боюсь вы меня убьёте :D и все функции замените (для быстродействия) ;).

ВСЕМ ОТКЛИКНУВШИМСЯ СПАСИБО!

Дмитрий
На сайте с 23.08.2006
Offline
222
#15

Trol, выкладывай :) Век живи век учись. Вот пока несталкивалися с этим сам видишь что пытаемся мутить. Будем опытом меняться ;)

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий