За последние 24 часа нас посетил 58021 программист и 1846 роботов. Сейчас ищут 1045 программистов ...

Замена значений в строке

Тема в разделе "Прочие вопросы по PHP", создана пользователем zorinalexey, 29 апр 2015.

  1. zorinalexey

    zorinalexey Активный пользователь

    С нами с:
    29 апр 2015
    Сообщения:
    26
    Симпатии:
    1
    Есть строка типа $string="Я хочу вставить изображение в мосто img при совпадении ";
    Как можно организовать поиск по данной строке и заменить значение img на например <img src="моя картинка№1.png" class="img" />?
     
  2. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Присвоить нужное значение. Это программирование, бро. Переменные могут менять значения.
    $string= " <img src="моя картинка№1.png" class="img" />";
     
  3. direx

    direx Новичок

    С нами с:
    5 мар 2015
    Сообщения:
    2
    Симпатии:
    0
    Код (PHP):
    1. $string = "Я хочу вставить изображение в мосто img при совпадении ";
    2. $string = str_replace('img', '<img src="моя-новая-картинка.png">', $string);
     
  4. zorinalexey

    zorinalexey Активный пользователь

    С нами с:
    29 апр 2015
    Сообщения:
    26
    Симпатии:
    1
    все сработало спасибо. а теперь не подскажите как это сделать в цикле если img попадается допустим 3 раза ?
    то есть есть строка $string="Я хочу вставить изображение вместо img при совпадении img вместо img ";
    как сделать чтобы $string = str_replace('img', '<img src="моя-новая-картинка.png">', $string); работала в цикле и каждый раз в место img вставлялось <img src="моя-новая-картинка№1.png"> затем<img src="моя-новая-картинка№2.png"> и так далее?
     
  5. mr.akv

    mr.akv Активный пользователь

    С нами с:
    31 мар 2015
    Сообщения:
    1.604
    Симпатии:
    206
    Подскажем. Прочитать документацию по циклам и всего лишь воплотить его в жизнь. :)
     
  6. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Для начала учимся читать документацию по неизвестным функциям.
    Цикл не нужен.
     
  7. zorinalexey

    zorinalexey Активный пользователь

    С нами с:
    29 апр 2015
    Сообщения:
    26
    Симпатии:
    1
    все сработало спасибо. а теперь не подскажите как это сделать в цикле если img попадается допустим 3 раза ?
    то есть есть строка $string="Я хочу вставить изображение вместо img при совпадении img вместо img ";
    как сделать чтобы $string = str_replace('img', '<img src="моя-новая-картинка.png">', $string); работала в цикле и каждый раз в место img вставлялось <img src="моя-новая-картинка№1.png"> затем<img src="моя-новая-картинка№2.png"> и так далее?
     
  8. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    А для замены можно отдавать массив сразу. В общем, читай доку.
     
  9. zorinalexey

    zorinalexey Активный пользователь

    С нами с:
    29 апр 2015
    Сообщения:
    26
    Симпатии:
    1
    А как заменить только первое совпадение?

    Добавлено спустя 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"> ";
    как это можно организовать
     
  10. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
  11. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Да прочитай ты уже документацию, е-мое. Я же не просто так сказал:
     
  12. zorinalexey

    zorinalexey Активный пользователь

    С нами с:
    29 апр 2015
    Сообщения:
    26
    Симпатии:
    1
    я уже разобрался спасибо а мануале не совсем то описано

    $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">
     
  13. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    [оффтоп]
    Безумие какое :)
    Автор, подсветка синтаксиса делается не так... Но я править не буду. Это локальный шедевр и памятник усердию, имхо, жалко трогать :)
    Чтобы узнать, как правильно делать, пройди по ссылке у меня в подписи. Но прошу, не переделывай этот свой пост. Что-то в этом есть.
    [/оффтоп]
     
  14. zorinalexey

    zorinalexey Активный пользователь

    С нами с:
    29 апр 2015
    Сообщения:
    26
    Симпатии:
    1
    суть не в подсветке главное что код работпет
     
  15. rodent90

    rodent90 Новичок

    С нами с:
    26 мар 2015
    Сообщения:
    533
    Симпатии:
    37
    А не проще просто передать массив в str_replace?
     
  16. zorinalexey

    zorinalexey Активный пользователь

    С нами с:
    29 апр 2015
    Сообщения:
    26
    Симпатии:
    1
    если передать массив в 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"> ";
     
  17. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Нет. Массив передавай в значение для замены. Тогда по порядку будут использоваться значения из массива.
     
  18. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    zorinalexey вариант с preg_replace_callback не подошёл?
     
  19. rodent90

    rodent90 Новичок

    С нами с:
    26 мар 2015
    Сообщения:
    533
    Симпатии:
    37
    Я понял о чем он, так не получится сделать как мы ему советуем. Ибо str_replace так не умеет делать. В связи с тем, что:
    А ему нужно по порядку заменять " img ".
    И как не крути, мы не сможем передать в массиве одинаковые ключи, а если и вовсе 1 параметр сделаем строкой то у нас вернет:

    Я хочу вставить изображение в мосто Array при совпадении Array

    Отсюда вывод: через str_replace не удастся заменить одинаковые слова по порядку.
    Но вот если передать разные ключи типо " img1 img2 " - без проблем str_replace справится, но ему то нужно именно " img img img " и чтобы это следовательно было 3 разных картинки.
    Можно пойти другим путем, отследить позицию каждой " img " и заменить либо только регулярки спасут.

    Но все же я склоняюсь к " img1 img2 img3 " - раз это разные вещи. =) И просто тулить массив с ключами и значениями и весь геморрой этот, что выше, просто не нужен.
     
  20. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    прикольно, мой пример игнорируют или он работает только у меня? :)
     
  21. rodent90

    rodent90 Новичок

    С нами с:
    26 мар 2015
    Сообщения:
    533
    Симпатии:
    37
    Лучше воспользоваться разноименными ключами.
    Код (PHP):
    1. $string='img1 img2';
    2. $images=array('img1'=>'logo1','img2'=>'logo2');
    3. $string=str_replace(array_keys($images),array_values($images),$string);
    4. echo $string; 
    Автор вводит себя в заблуждение, либо просто не знает о такой возможности.
     
  22. zorinalexey

    zorinalexey Активный пользователь

    С нами с:
    29 апр 2015
    Сообщения:
    26
    Симпатии:
    1
    в том то и дело что в строке нет img1 и img2 есть только img и img а заменить их надо на img1 и img2 и через массив это тоже не получится
     
  23. zorinalexey

    zorinalexey Активный пользователь

    С нами с:
    29 апр 2015
    Сообщения:
    26
    Симпатии:
    1
    нет спасибо тоже что то не совсем то
     
  24. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Тут хоть кто-то читает советы и сообщения полностью и вдумчиво?

    Код (PHP):
    1. $string = "one img two img three img fore img five img"; 
    2. $i = 0; 
    3. $newstring = preg_replace_callback( 
    4.     '/img/', 
    5.     function($match) use (&$i) {
    6.         $i++;
    7.         return ('<img src='.($match[0] + $i).'.png>');
    8.     }, 
    9.     $string 
    10.     ); 
    11. 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>