Задача такая:
Есть файл с текстом и файл словарь, надо пробежаться по файлу с текстом и выделить жирным все слова которые есть в словаре.
while(!feof($f))
{
$this->content_array[] = str_replace($this->dic_array,$this->dic_array_changed,fgets($f),$this->counts);
$this->content_array[] = strtr(fgets($f), $this->dic_array_changed);
}
пробую двумя методами, но результат один и тот же:
приложений
А надо что бы виделялось только слово целиком, если оно конечно есть в словаре, а не часть.
Спустя 25 минут, 1 секунда (9.09.2011 - 08:36) kirik написал(а):
Цитата (kadr @ 9.09.2011 - 01:11) |
пробую двумя методами, но результат один и тот же: приложений |
Я так думаю что у вас "при" встречается раньше чем слово "приложений".
str_replace заменяет слова целиком, и с учётом регистра.
Спустя 8 минут, 15 секунд (9.09.2011 - 08:44) kadr написал(а):
Да раньше. А как мне от этого избавиться.
Спустя 15 минут, 25 секунд (9.09.2011 - 08:59) kirik написал(а):
Цитата (kadr @ 9.09.2011 - 01:44) |
А как мне от этого избавиться. |
Как вариант - сортировать слова в словаре по количеству символов от большего к меньшему. Тогда более длинные слова будут заменяться первыми. Но тут тоже дорабатывать надо - т.к. "приложений" будет в итоге выглядеть так: "<b><b>при</b>ложений</b>". Регулярные выражения тут подойдут больше чем просто str_replace.
Спустя 15 минут, 6 секунд (9.09.2011 - 09:14) kadr написал(а):
Понятно, подумаю.
У меня еще один вопрос, посмотрите вот на этот цикл и скажите почему он не отрабатывает:
Суть такая, если в массиве $this->content_array элементов(строк) больше чем число в переменной $len, то он записывает это количество строк в файл и продолжает дальше, с оставшимся количеством то же самое.
У меня еще один вопрос, посмотрите вот на этот цикл и скажите почему он не отрабатывает:
$i = 0;
while ($content .= current($this->content_array))
{
if ($i == $len)
{
$content = '<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Test</title>
</head>
<p>'
.$content.
'</p>
</html>';
$fw = fopen($save_url.'/content_'.date('d.m.y H:m:s',mktime()).'.html',"w");
fwrite($fw, $content);
fclose($fw);
$i = 0;
$content = '';
continue;
}
$i++;
next($this->content_array);
}
Суть такая, если в массиве $this->content_array элементов(строк) больше чем число в переменной $len, то он записывает это количество строк в файл и продолжает дальше, с оставшимся количеством то же самое.
Спустя 28 минут, 21 секунда (9.09.2011 - 09:43) kirik написал(а):
kadr
Попробуйте перед циклом поставить
Вместо fopen-fwrite-fclose можно использовать file_put_contents().
Попробуйте перед циклом поставить
reset($this->content_array);
Вместо fopen-fwrite-fclose можно использовать file_put_contents().
Спустя 24 минуты, 50 секунд (9.09.2011 - 10:08) kadr написал(а):
Хорошо, спасибо, я разобрался, все получилось, работает!