[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Поиск в строке, выделение найденного
Гость_Дмитрий
Поиск в строке, выделение найденного, без учета регистра и с поддержкой кириллицы

Собственно не нашел в интернете ничего, чтобы могло удолитворить мои потребности, написал свой скрипт, все отлично работает, только вот встал вопрос в оптимизации, может кто подкинет пару идей )


<?

$string = "Привет, как дела как";
$search = "КАК";

echo intoBold($string, $search); // Привет, <b>как</b> дела <b>как</b>

function intoBold($string, $search)
{
$string_array = mb_str_split($string);

$new_string = preg_replace("#{$search}#ius", $search , $string);

$new_string_array = mb_str_split($new_string);

$search_array = mb_str_split($search);

$new_array = array();

for($i=0; $i<count($new_string_array); ++$i)
{
$word = '';

for($j=0; $j<count($search_array); ++$j)
{
$word .= $new_string_array[$j+$i];
}

if($word == $search) array_push($new_array, $i);
}

$new_value = '';

for($k=0; $k<count($string_array); ++$k)
{

for($j=0; $j<count($new_array); ++$j)
{
if($k == $new_array[$j]) $new_value .= '<b>';
if($k == ($new_array[$j]+count($search_array))) $new_value .= '</b>';
}

$new_value .= $string_array[$k];
}

return $new_value;
}

function mb_str_split($newvalueing)
{
return preg_split('/(?<!^)(?!$)/u', $newvalueing );
}
?>




Спустя 2 минуты, 12 секунд (12.02.2011 - 23:26) twin написал(а):
Цитата
Собственно не нашел в интернете ничего, чтобы могло удолитворить мои потребности

Гость_Дмитрий
Плохо искал smile.gif

Спустя 3 минуты, 32 секунды (12.02.2011 - 23:29) Гость_Дмитрий написал(а):
Ужас, открыл пару первых, там все еще более запутаннее чем у меня ))

Спустя 34 минуты, 12 секунд (13.02.2011 - 00:03) Гость_Дмитрий написал(а):
отредактировать не смогу, но вот просматривая эти работы понял что у меня ищет только последственную фразу, и если два слова стоят в разных местах в тексте, то он их просто не найдет, подредактировал, и все равно получилось гораздно менее громостко ))


<?

$string = "Привет, как дела как мустанг и кошка";
$search = "КАК, коШКа";

echo "<BR>Строка: ".$string."<br><br><br>Ищем в строке: ".$search."<br><br><br>Результат: ".prepareBold($string, $search);

function prepareBold($string, $search)
{
$string = deleteTags($string);
$search = deleteTags($search);

$array = split("[ ]", $search);

$new_val = $string;

for($i=0; $i<count($array); ++$i)
{
$new_val = intoBold($new_val, $array[$i]);
}

return $new_val;
}

function deleteTags($value)
{
$value = str_replace('.', '', $value);
$value = str_replace(',', '', $value);
$value = str_replace('"', '', $value);
$value = str_replace("'", '', $value);
$value = str_replace(';', '', $value);
$value = str_replace(':', '', $value);
$value = str_replace('[', '', $value);
$value = str_replace(']', '', $value);
$value = str_replace('{', '', $value);
$value = str_replace('}', '', $value);
$value = str_replace('(', '', $value);
$value = str_replace(')', '', $value);
$value = str_replace('-', '', $value);
$value = str_replace('_', '', $value);
$value = str_replace('+', '', $value);
$value = str_replace('=', '', $value);
$value = str_replace('!', '', $value);
$value = str_replace('@', '', $value);
$value = str_replace('#', '', $value);
$value = str_replace('$', '', $value);
$value = str_replace('%', '', $value);
$value = str_replace('^', '', $value);
$value = str_replace('&', '', $value);
$value = str_replace('*', '', $value);
$value = str_replace('№', '', $value);
$value = str_replace('%', '', $value);
$value = str_replace('|', '', $value);
$value = str_replace('/', '', $value);
$value = str_replace('?', '', $value);

return $value;
}

function intoBold($string, $search)
{
$string_array = mb_str_split($string);

$new_string = preg_replace("#{$search}#ius", $search , $string);

$new_string_array = mb_str_split($new_string);

$search_array = mb_str_split($search);

$new_array = array();

for($i=0; $i<count($new_string_array); ++$i)
{
$word = '';

for($j=0; $j<count($search_array); ++$j)
{
$word .= $new_string_array[$j+$i];
}

if($word == $search) array_push($new_array, $i);
}

$new_value = '';

for($k=0; $k<count($string_array); ++$k)
{

for($j=0; $j<count($new_array); ++$j)
{
if($k == $new_array[$j]) $new_value .= '<b>';
if($k == ($new_array[$j]+count($search_array))) $new_value .= '</b>';
}

$new_value .= $string_array[$k];
}

return $new_value;
}

function mb_str_split($newvalueing)
{
return preg_split('/(?<!^)(?!$)/u', $newvalueing );
}
?>


Результат

Строка: Привет, как дела как мустанг и кошка

Ищем в строке: КАК, коШКа

Результат: Привет как дела как мустанг и кошка

Спустя 18 минут, 16 секунд (13.02.2011 - 00:22) alex12060 написал(а):
Я уверен, что жрет ресурсов как верблюд воду после недели без нее)

Спустя 20 минут, 31 секунда (13.02.2011 - 00:42) twin написал(а):
Вот этот рекомендую. Простенький и все умеет.

Спустя 1 минута, 12 секунд (13.02.2011 - 00:43) Guest написал(а):
Цитата (alex12060 @ 12.02.2011 - 21:22)
Я уверен, что жрет ресурсов как верблюд воду после недели без нее)

как вобще можно проверить потребление ресурсов)

Спустя 29 минут, 17 секунд (13.02.2011 - 01:13) Invis1ble написал(а):
можно x-debug, а можно пыхом. Например есть такие функции:
memory_get_peak_usage()
memory_get_usage()

скорость выполнения - засекать microtime()

Спустя 3 минуты, 1 секунда (13.02.2011 - 01:16) Guest написал(а):
microtime показыват что все делается очень быстро а вот top показывает что проц на 99% загруже на серваке )) если пытаться найти и выделить 30 слов )

user posted image
Быстрый ответ:

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