Как ограничить str_replace?

Ysn

Guest
Как ограничить str_replace?

Как заменить первое вхождение подстроки в строке? То есть, если

PHP:
$a=str_replace("#symbol#",$text,$a);
И в $a #symbol# встречается много раз - как мне сделать str_replace только первого #symbol# ?
 

tristram

Guest
PHP:
function replacefirstpos($haystack,$needle,$replace)
{
 $pos = strpos($haystack,$needle);
 return substr($haystack,0,$pos).$replace.substr($haystack,$pos+strlen($needly),strlen($haystack));
}
вот тебе на вскидку, должно вроде пахать

-~{}~ 25.03.05 02:25:

P.S:
$haystack - текст
$needle - в данном случае это #symbol#
$replace - $text
 

Ysn

Guest
Что-то делает, делает хорошо, но не то.

Мне нужно циклом пройтись по тексту, и поменять попорядку символы... ВОт пример:

PHP:
<html>
<head>
	<title>Untitled</title>
</head>

<body>
<table border="3" bgcolor="#00FFFF"><tr><td>#img#</td><td>#img#</td></tr></table>


</body>
</html>
В этом тексте я хочу поменять первую #img# на что-то... потом цикл по второму кругу, и меняем вторую #img#.

Весь этот текст пусть будет записан в переменной $sh.
 

tristram

Guest
я проверил. всё как в аптеке.
PHP:
<?php
function replacefirstpos($haystack,$needle,$replace) 
{ 
$pos = strpos($haystack,$needle); 
return substr($haystack,0,$pos).$replace.substr($haystack,$pos+strlen($needle),strlen($haystack)); 
}
$sh = "<html> 
<head> 
    <title>Untitled</title> 
</head> 
<body> 
<table border=\"3\" bgcolor=\"#00FFFF\"><tr><td>#img#</td><td>#img#</td></tr></table> 
</body> 
</html>";
$result = replacefirstpos($sh,"#img#","firstimg");
$result = replacefirstpos($result,"#img#","secondimg");
echo $result;
?>
-~{}~ 25.03.05 03:34:

P.S в первой мессаге у меня опечатка , $needle вместо $needly надо было сделать =) во втором примере всё ок
 

Ysn

Guest
Э, неее.... Тут понятно... А ведь сколько td, а сколько tr человек вобъет - неизвестно. Это я две #img# втащил... Но нужно чтобы не так четко, т.е., $result = replacefirstpos($sh,"#img#","firstimg");
$result = replacefirstpos($result,"#img#","secondimg");

не подходит. Вот ситуация:

PHP:
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=\"a.php?a=".$href."&b=".$info_images['id']."\" target=\"_blank\"><img src=".$img." border='0'></a>";

 ВОТ ГДЕ-ТО ТУТ И НАДО ПОМЕНЯТЬ ПЕРВУЮ #img#, и перейти в начало цикла... тогда получим новые значения, и опять поменять первую #img# (она уже будет второй - первая к тому моменту будет затерта). И так далее, третью, четвертую...
}
 

rotoZOOM

ACM maniac
Ysn я только с третьего раза перечитав твоё последнее сообщение понял что тебе нужно. А теперь посмотри на свой первый вопрос и последний. Найди 10 различий.
tristam тебе совершенно верно решил твою задачу, а то, что ты изложил в последнем посте НИКАКОГО отношения не имеет к первому посту.
Юзай шаблонизаторы.
 

Ysn

Guest
Пусть так. Будем считать, что я смог сформулировать вопрос только с третьего раза. И прошу помочь именно в этом вопросе. А что такое шаблонизаторы - я не знаю.
 
Сверху