Есть строка типа $string="Я хочу вставить изображение в мосто img при совпадении "; Как можно организовать поиск по данной строке и заменить значение img на например <img src="моя картинка№1.png" class="img" />?
Присвоить нужное значение. Это программирование, бро. Переменные могут менять значения. $string= " <img src="моя картинка№1.png" class="img" />";
Код (PHP): $string = "Я хочу вставить изображение в мосто img при совпадении "; $string = str_replace('img', '<img src="моя-новая-картинка.png">', $string);
все сработало спасибо. а теперь не подскажите как это сделать в цикле если img попадается допустим 3 раза ? то есть есть строка $string="Я хочу вставить изображение вместо img при совпадении img вместо img "; как сделать чтобы $string = str_replace('img', '<img src="моя-новая-картинка.png">', $string); работала в цикле и каждый раз в место img вставлялось <img src="моя-новая-картинка№1.png"> затем<img src="моя-новая-картинка№2.png"> и так далее?
все сработало спасибо. а теперь не подскажите как это сделать в цикле если img попадается допустим 3 раза ? то есть есть строка $string="Я хочу вставить изображение вместо img при совпадении img вместо img "; как сделать чтобы $string = str_replace('img', '<img src="моя-новая-картинка.png">', $string); работала в цикле и каждый раз в место img вставлялось <img src="моя-новая-картинка№1.png"> затем<img src="моя-новая-картинка№2.png"> и так далее?
А как заменить только первое совпадение? Добавлено спустя 15 минут 13 секунд: в том то и дело что в моем случае нужен цикл то есть есть строка типа $string= "Я хочу вставить изображение вместо img при совпадении img вместо img "; если использовать str_replace('img', '<img src="1.png">', $string) то на выходе мы получаем $string= "Я хочу вставить изображение вместо <img src="1.png"> при совпадении <img src="1.png"> вместо <img src="1.png"> "; а мне нужно получить $string= "Я хочу вставить изображение вместо <img src="1.png"> при совпадении <img src="2.png"> вместо <img src="3.png"> "; как это можно организовать
Если правильно понял, то в документации к https://php.net/manual/ru/function.preg-replace-callback.php есть комментарий с нужным кодом Код (PHP): $string = "img img"; $images = array('logo1', 'logo2'); $newstring = preg_replace_callback( '/img/', function($match) use (&$images) { return array_shift($images); }, $string ); echo $newstring;
я уже разобрался спасибо а мануале не совсем то описано $string= "Я хочу вставить изображение вместо img при совпадении img вместо img "; $pattern = "/img/"; $replacement = "img_r"; $count_img=substr_count($string,'img'); $string=preg_replace($pattern, $replacement, $string); for($i=0;$i<$count_img;$i++){ $pattern = "/img_r/"; $img=$i+1; $replacement = "<img src='".$img.".png' width='115' height='70'/>"; $string=preg_replace($pattern, $replacement, $string,1);} echo $string; выведет Я хочу вставить изображение вместо <img src="1.png"> при совпадении <img src="2.png"> вместо <img src="3.png">
[оффтоп] Безумие какое Автор, подсветка синтаксиса делается не так... Но я править не буду. Это локальный шедевр и памятник усердию, имхо, жалко трогать Чтобы узнать, как правильно делать, пройди по ссылке у меня в подписи. Но прошу, не переделывай этот свой пост. Что-то в этом есть. [/оффтоп]
если передать массив в str_replace то замена будет $string= "Я хочу вставить изображение вместо <img src="1.png"> при совпадении <img src="1.png"> вместо <img src="1.png"> "; вместо $string= "Я хочу вставить изображение вместо <img src="1.png"> при совпадении <img src="2.png"> вместо <img src="3.png"> ";
Нет. Массив передавай в значение для замены. Тогда по порядку будут использоваться значения из массива.
Я понял о чем он, так не получится сделать как мы ему советуем. Ибо str_replace так не умеет делать. В связи с тем, что: А ему нужно по порядку заменять " img ". И как не крути, мы не сможем передать в массиве одинаковые ключи, а если и вовсе 1 параметр сделаем строкой то у нас вернет: Я хочу вставить изображение в мосто Array при совпадении Array Отсюда вывод: через str_replace не удастся заменить одинаковые слова по порядку. Но вот если передать разные ключи типо " img1 img2 " - без проблем str_replace справится, но ему то нужно именно " img img img " и чтобы это следовательно было 3 разных картинки. Можно пойти другим путем, отследить позицию каждой " img " и заменить либо только регулярки спасут. Но все же я склоняюсь к " img1 img2 img3 " - раз это разные вещи. =) И просто тулить массив с ключами и значениями и весь геморрой этот, что выше, просто не нужен.
Лучше воспользоваться разноименными ключами. Код (PHP): $string='img1 img2'; $images=array('img1'=>'logo1','img2'=>'logo2'); $string=str_replace(array_keys($images),array_values($images),$string); echo $string; Автор вводит себя в заблуждение, либо просто не знает о такой возможности.
в том то и дело что в строке нет img1 и img2 есть только img и img а заменить их надо на img1 и img2 и через массив это тоже не получится
Тут хоть кто-то читает советы и сообщения полностью и вдумчиво? Код (PHP): $string = "one img two img three img fore img five img"; $i = 0; $newstring = preg_replace_callback( '/img/', function($match) use (&$i) { $i++; return ('<img src='.($match[0] + $i).'.png>'); }, $string ); echo $newstring; Исходная строка: one img two img three img fore img five img Результат: one <img src=1.png> two <img src=2.png> three <img src=3.png> fore <img src=4.png> five <img src=5.png>