|
|
|
| Как можно сделать str_replace только один раз? То есть, если
$a=str_replace("#symbol#",$text,$a);
|
И в $a #symbol# встречается много раз - как мне сделать str_replace только первого #symbol# ? | |
|
|
|
|
|
|
|
для: Shorr Kan
(25.03.2005 в 01:29)
| | никак.
[поправлено модератором] | |
|
|
|
|
|
|
|
для: blackdog
(25.03.2005 в 02:27)
| | Как же "никак"? Еще как - "как"! Наверняка регулярные выражения это позволяют... Или какая-нибудь функция есть. Или, в конце концов, грамотный порядок применения обычных (обычными я величаю те, которые знаю) функций. | |
|
|
|
|
|
|
|
для: Shorr Kan
(25.03.2005 в 01:29)
| | Найти первое вхождение строки "#symbol#" в $a при помощи функции strpos
<?php
$pos = strpos($a, "#symbol#");
?>
|
И осуществить замену при помощи функции substr
<?php
$a = substr($a,0,$pos) + $text + substr($a, $pos + strlen("#symbol#"));
?>
|
PS Тут может где-то нужно прибавить или отнять единицу - это необходимо установить эксперементально. | |
|
|
|
|
|
|
|
для: cheops
(25.03.2005 в 09:32)
| | Откровенно говоря, ерунда какая-то получается. Я ночью попробовал сделать то же самое - кое-как работало, но не так. Удалил. Теперь попробовал повторить, но уже не получилось.
<?
$info_admin = mysql_fetch_array(mysql_query("SELECT * FROM admin;"));
$pre_images = mysql_query("SELECT * FROM images ORDER BY clicks DESC LIMIT $info_admin[sum_img];");
$z=0;
$sum_cj=$info_admin['sum_img']/100*$info_admin['procent_on_cj'];
$shablon=$info_admin['shablon'];
while($info_images=mysql_fetch_array($pre_images)){
$rand_href=mysql_fetch_array(mysql_query("SELECT * FROM links ORDER BY RAND() LIMIT 1;"));
$img=$info_admin['url_images'].$info_images['img'];
$foto="<a href=\"replace.php?linkid=".$href."&id=".$info_images['id']."\" target=\"_blank\"><img src=".$img." border='0'></a>";
$pos = strpos($shablon, "#img#");
$shablon = substr($shablon,0,$pos).$foto.substr($shablon, $pos + strlen("#img#"));
}print $shablon;?>
|
$shablon выглядит в тесте который я делаю, так:
<table border="3" bgcolor="#00FFFF"><tr><td>#img#</td><td>#img#</td></tr></table>
|
| |
|
|
|
|
|
|
|
для: Shorr Kan
(25.03.2005 в 18:11)
| | Первое, что мне кажется неверным:
$shablon = substr($shablon,0,$pos).$foto.substr($shablon, $pos + strlen("#img#"));
|
Нужно
$shablon = substr($shablon,0,$pos).$foto.substr($shablon, $pos + strlen($foto));
|
Но работа от этого не улучшается. | |
|
|
|
|
|
|
|
для: Shorr Kan
(25.03.2005 в 18:11)
| | Если мне не изменяет память, то функция пишется так:
mixed str_replace ( mixed search, mixed replace, mixed subject [, int &count])
Где count и есть параметр сколько раз менять. Или я чего то не понял в вопросе. | |
|
|
|
|
|
|
|
для: XPraptor
(25.03.2005 в 18:20)
| |
$shablon=str_replace ("#img#",$foto,$shablon,1);
|
Warning: Wrong parameter count for str_replace() in.... | |
|
|
|
|
|
|
|
для: Shorr Kan
(25.03.2005 в 18:47)
| | Сделал вот что:
<?
$img='';$x='';
$info_admin = mysql_fetch_array(mysql_query("SELECT * FROM admin;"));
$pre_images = mysql_query("SELECT * FROM images ORDER BY clicks DESC LIMIT $info_admin[sum_img];");
$z=0;$g=0;
$sum_cj=$info_admin['sum_img']/100*$info_admin['procent_on_cj'];
$shablon=$info_admin['shablon'];
$substr_count = substr_count($shablon,"#img#");
while($info_images=mysql_fetch_array($pre_images)){
$rand_href=mysql_fetch_array(mysql_query("SELECT * FROM links ORDER BY RAND() LIMIT 1;"));
$href=$rand_href['id'];
$img=$info_admin['url_images'].$info_images['img'];
$foto="<a href=\"replace.php?linkid=".$href."&id=".$info_images['id']."\" target=\"_blank\"><img src=".$img." border='0'></a>";
if($g<$substr_count){
$pos = strpos($shablon, "#img#");
$shablon = substr($shablon,0,$pos).$foto.substr($shablon, $pos + strlen("#img#"));$g=$g+1;
}else{
print $shablon;}
}?>
|
Но неверность работы заключается в следующем - все картинки по вертикали идентичны. Шаблон тот же, что я давал выше.
Но теперь добавил после print $shablon; еще $g=0; - теперь полезли ошибки... как-будто не хватает открывающих/закрывающих скобок тегов. | |
|
|
|
|
|
|
|
для: Shorr Kan
(25.03.2005 в 18:55)
| | Я бы сделал так:
<?
$blocked = false;
function str_replace_once($search,$replace,$subject)
{
global $blocked;
if($blocked == false)
{
$blocked = true;
return str_replace($search,$replace,$subject);
}
else return 0;
}
?>
|
| |
|
|
|
|
|
|
|
для: isset
(25.03.2005 в 19:01)
| | Вы не поверите... я кажется сделал!
<?
$info_admin = mysql_fetch_array(mysql_query("SELECT * FROM admin;"));
$pre_images = mysql_query("SELECT * FROM images ORDER BY clicks DESC LIMIT $info_admin[sum_img];");
$g=0;
$sum_cj=$info_admin['sum_img']/100*$info_admin['procent_on_cj'];
$shablon=$info_admin['shablon'];
$substr_count = substr_count($shablon,"#img#");
while($info_images=mysql_fetch_array($pre_images)){
$rand_href=mysql_fetch_array(mysql_query("SELECT * FROM links ORDER BY RAND() LIMIT 1;"));
$href=$rand_href['id'];
$img=$info_admin['url_images'].$info_images['img'];
$img=$info_images['img'];
$foto="<a href=\"replace.php?linkid=".$href."&id=".$info_images['id']."\" target=\"_blank\"><img src=".$img." border='0'></a>";
if($g<$substr_count){if($g==0){$shablon=$info_admin['shablon'];}
$pos = strpos($shablon, "#img#");
$shablon = substr($shablon,0,$pos).$foto.substr($shablon, $pos + strlen("#img#")+5);$g=$g+1;
}else{
print $shablon;$g=0;}
}?>
|
| |
|
|
|
|
|
|
|
для: Shorr Kan
(25.03.2005 в 19:16)
| | Сорри, в предыдущем примере не разобрался доконца. Параметр &count в функции не устанавливает кол-во изменений, а возвращает сколько было изменений и то только в PHP 5.0 и выше.
Но вот зато этот код проверил и на своей машине и в инете на сервере, он работает на PHP 4.0.1 и выше.
$strt="строка оригинал! img Слово имж будем менять один раз! img Это должно остатьтся img !";
print $strt . "<BR>";
$newstr=preg_replace("/img/", "заменил", $strt, 1);
print "Вот новая строка:<BR>" . $newstr . "<BR>";
|
Обращаем внимание что строку которую меняем нужно ограничить бакслэшами, потому как это типа регулярное выражение, а строку на что меняем не ограничиваем. | |
|
|
|
|
|
|
|
для: XPraptor
(26.03.2005 в 11:55)
| | Очень мило. Сравню оба варианта. Спасибо большое. | |
|
|
|