[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Как реализовать такую замену текста в строке
tureg1
Всем привет!
В тексте встречаются мои спецтэги, вида iii23, iii687, iii45689. Необходимо находить эти тэги в тексте, отделять цифру от iii, и по ней делать запрос в базу, а результат запроса записывать обратно в строку.

Пробовал делать так:

if (preg_match( '/^(.*)(\*[i]{3})([0-9]{1,7})(\*)(.*)$/iUs', $content_2, $match ))
{
$do = $match[1];
$iii = $match[2];
$cifra = $match[3];
$zv = $match[4];
$posle = $match[5];

$result291=mysql_query("SELECT * FROM d_images WHERE id=$cifra");
$r291=mysql_fetch_array($result291);
$id_img = $r291[id];
$img_path = $r291[image_path];


$validurl = "<a href=im/$img_path><img src=im/th/$img_path></a>";

echo "$iii<br>$cifra<br>$zv<br>$do$validurl$posle";}


Но в таком случает заменяется только первый найденный тэг в тексте, а последующие не заменяются. И это логично. Что посоветует чтобы заменять все тэги из текста?

может как то правильно можно применить str_replace? Или циклами реализовать?
Игорь_Vasinsky
preg_replace()

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
tureg1
не смог разобраться с preg_replace, сделал с помощью цикла

while (preg_match( '/^(.*)(\*[i]{3})([0-9]{1,7})(\*)(.*)$/iUs', $content_2, $match))
{
$do = $match[1];
$iii = $match[2];
$cifra = $match[3];
$zv = $match[4];
$posle = $match[5];

$result291=mysql_query("SELECT * FROM d_images WHERE id=$cifra");
$r291=mysql_fetch_array($result291);
$id_img = $r291[id];
$img_path = $r291[image_path];


$content_2 = "$do<a href=im/$img_path><img src=im/th/$img_path></a>$posle";

}
FatCat
$tagz = explode("iii", $content_2);
foreach($tagz as $v)
{
$v = intval($v);
$res = mysql_query("SELECT * FROM d_images WHERE id=".$v);
$r=mysql_fetch_array($res);
$validurl = '<a href="im/'.$r['id'].'"><img src="im/th/'.$r['image_path'].'"></a>';
$content_2 = str_replace("iii".$v, $validurl, $content_2);
}


_____________
Бесплатному сыру в дырки не заглядывают...
FatCat
Или чуть оптимальней:
$tagz = explode("iii", $content_2);
foreach($tagz as $k=>$v)$tagz[$k] = intval($v);
$res = mysql_query("SELECT * FROM d_images WHERE id IN(".implode(",",$tagz).")");
while($r=mysql_fetch_array($res))
{
$validurl = '<a href="im/'.$r['id'].'"><img src="im/th/'.$r['image_path'].'"></a>';
$content_2 = str_replace("iii".$v, $validurl, $content_2);
}


_____________
Бесплатному сыру в дырки не заглядывают...
stump
5 коп в оффтоп:
$cifra === $digit | $numeric | etc
$posle === $after


_____________
Трус не играет в хокей
Игорь_Vasinsky
FatCat
Цитата
Или чуть оптимальней:

ну хотяб запрос из цикла вынул.

тогда бы уж указал на mysql_fetch_array и поправил.

вместо str_replace() я уже давно использую strtr(), т.к. беда с кириллицей. но тут пофиг.

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
FatCat
Цитата (Игорь_Vasinsky @ 27.03.2015 - 14:06)
запрос из цикла вынул

Я сначала подредактировал логику топикстартера, а потом показал пути к улучшению.
Дальше улучшать уже совсем блохи. Можно конечно собрать массивы для замены и в один прогон, но это не многим быстрее, чем замена в цикле.


Цитата (Игорь_Vasinsky @ 27.03.2015 - 14:06)
т.к. беда с кириллицей

Я работаю с 1251-й кодировкой, и у меня никаких бед с кириллицей нет.

_____________
Бесплатному сыру в дырки не заглядывают...
Игорь_Vasinsky
Цитата
Я работаю с 1251-й кодировкой

в этой кодировке проблем нету. проблемы в той - которая популярна уже года 3.

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
FatCat
Цитата (Игорь_Vasinsky @ 27.03.2015 - 14:43)
проблемы в той - которая популярна уже года 3

Она популярна из-за аякса.
Мне же проще написать самому на джаваскрипт, и не иметь проблем с кодировками.

_____________
Бесплатному сыру в дырки не заглядывают...
Быстрый ответ:

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