Урок 19. PHP — str_replace

Сейчас мы рассмотрим одну очень полезную функцию для работы со строками, а именно для замены частей строк. Это функция str_replace, которая похожа на метод в текстовых редакторах «Заменить». Как ее использовать, примеры и советы читайте ниже.

Параметры вызова

str_replace имеет три параметра, которые все являются обязательными.

str_replace(search, replace, originalString)
  • search — это то, что вы хотите найти. Это может быть строка или массив.
  • replace — все найденные элементы, которые вы задали в search для поиска, будут заменены на это значение. Это, опять же, может быть строка или массив.
  • originalString — исходная строка, в которой и будет производиться поиск. Функция НЕ меняет входную строку!

На самом деле, здесь, как и во всех предыдущих уроках, все просто. Давайте посмотрим на пример кода и все сразу встанет на свои места.

Пример применения str_replace

Итак, есть у нас входная строка «На полке лежит X килограмм мандарин». Вместо «X» мы хотим подставить нужную цифру. Может для этого воспользоваться реплейсом примерно таким образом:

//Входная строка, которую будем использовать как шаблон
$rawstring = "На полке лежит X килограмм мандарин.";

//заменяем
$str_1 = str_replace("X", "10", $rawstring);

//можно и на другое значение заменить, любое
$str_2 = str_replace("X", "135473", $rawstring);

echo "Первый раз: ". $str_1 . "<br />";
echo "Второй раз: ". $str_2;

Получаем следующее:

Первый раз: На полке лежит 10 килограмм мандарин.
Второй раз: На полке лежит 135473 килограмм мандарин.

Пример, конечно, не из лучших, я просто другого не придумал, но он отражает суть, верно? Надеюсь все понятно, если нет, то спрашивайте в комментариях.

str_replace с массивами: несколько замен в одной

В примере мы использовали реплейс, чтобы заменить одно слово «X» на нашу строку (число или что угодно), но что если мы хотим заменить много слов? Можно попробовать просто использовать функцию несколько раз, или же создать массив слов, КОТОРЫЕ будем заменять, а также второй массив, со значениями НА КОТОРЫЕ будем заменять, чтобы получить результат за один вызов функции.

Давайте расширим тот же пример, но позаменяем еще что-то.

//Строка - шаблон
$rawstring = "На Z лежит X килограмм отборных Y.";

//массив ЧТО будем заменять
$placeholders = array('Z', 'X', 'Y');
//Массив НА ЧТО будем заменять
$vals_1 = array('полке', '5', 'апельсинов');
//Ну или на это
$vals_2 = array('столе', '189', 'груш');

//заменяем раз
$str_1 = str_replace($placeholders, $vals_1, $rawstring);

//заменяем два
$str_2 = str_replace($placeholders, $vals_2, $rawstring);

echo "Один: ". $str_1 . "<br />";
echo "Два: ". $str_2;

Соответственно, что мы получим:

Один: На полке лежит 5 килограмм отборных апельсинов.
Два: На столе лежит 189 килограмм отборных груш.

Такие вот дела. Теперь можете сами прикинуть как вы сможете использовать данный метод. На самом деле, он Очень полезен! Например, при написании парсеров — просто крайне необходим!

Файлы | Содержание | Работа с cURL

Комментарии:

  1. Александр — 08.02.2013 14:56

    Спасибо администратору! Отличный сайт, именно тут я начал свой базис PHP. Всё разбирается детально и по мелочам. Рассказываете легко и ненавязчиво, так что создаётся впечатление что PHP это реально просто и легко! Хотелось бы конечно побольше уроков, но и данный минимум полученный тут уже даёт возможность мне читать что-то более углублённо и с понятием о чём речь. Спасибо автору ещё раз. Совет, если ваши статьи авторские и не копипаста откуда-то сделайте возможность пожертвования. Я бы пару тысяч вам закинул просто в благодарность, ибо мне уроки очень помогли :) Я вовсю ухожу из тестирования в разработку, и каждый день читал по 4-5 уроков отсюда, так вот я могу уже помогать нашим разработчикам работать над проектами.

  2. myblaze 08.02.2013 19:08

    Александр, спасибо большое за теплые слова. Статьи авторские. Поначалу было переводил зарубежные уроки, но потом понял, что придется очень многое адаптировать и решил что проще уже полностью самому писать :) Буду и дальше стараться давать качественный материал своим читателям ) Вам отписал на почту.

  3. Миша — 04.03.2013 22:10

    Теперь гоу фейки делать) Спасибо, думал PHP выучить это такой гемор! А пройдя Ваш экпресс курс, изменил своё мнение, спасибо за заложенный базис =) Буду практиковаться и учится дальше, развиваться! Выкладывайте еще уроки, например про среду разработки, серверы и т.п. Ну и конечно же про остальные возможности PHP.

  4. Наталья — 18.12.2013 23:46

    Огромное спасибо, отличный мануал!

  5. Роман — 01.04.2014 16:54

    хотел бы уточнить, str_replace ищет и заменяет до компиляции или после, потому, что например вместо Х может быть любая переменная которая может отображать какое-угодно значение и если пхп делает до компиляции, то попросту реплейс не найдет Х, потому что там будет какой-нибудь $text

  6. Николай — 11.08.2014 11:42

    Присоединяюсь к поблагодарившим. Лучший экспресс-курс PHP для начинающих. Одолел весь курс в 3 присеста (правда, у меня был опыт программирования на C#). Все предельно понятно. Теперь для начала смогу автоматизировать всю рутинную работу по редактированию страниц своего сайта. Один вопрос немного не в тему. Почему у вас в примерах этого и прошлых уроков некоторые HTML-теги со слэшем в конце: ? По-моему, надо просто . Или это опечатка?

  7. Николай — 11.08.2014 11:47

    Теги в комментариях не отображаются. Я имел в виду тег br в этом уроке.

  8. myblaze 11.08.2014 15:52

    Николай, все верно, по стандартам W3C все теги должны быть закрыты. Если тег не имеет отдельной закрывающейся части (как img и br), то допускается закрытие сразу же в открувающем, как у меня с br.

  9. Улугбек — 14.12.2014 19:44

    ваши уроки мне пригодились понять основу PHP) мне очень понятны все материалы благодарю вас

  10. Дитрий — 25.02.2015 20:27

    Лови в одну строку
    str_replace(array_keys($replacements), $replacements, $message);

  11. Евгений — 23.07.2015 16:47

    Очень нравятся ваши уроки, огромное спасибо.
    Для меня это все еще огромная пропасть, но уже что то понимаю.
    Например связал Форму отправки с кодом switch. Получилось прикольно))

  12. BPA — 30.11.2015 03:56

    Благодарю вас, myblaze, за эти уроки.Мне они сильно помогли)

  13. Алексей — 22.12.2015 18:27

    Добрый день! а кто то мне может объеснить почему эта функция так делает:

    $st=’function get_dist(&$smarty, &$db, &$json){ if (($a)&&($b))’;
    $arr = str_replace(«&$smarty»,»$smarty»,$st);
    print_r($arr);

    Нужно:
    function get_dist($smarty, &$db, &$json){ if (($a)&&($b))
    А получаем:
    function get_dist($smarty, $db, $json){ if (($a)($b))
    оно удалило везде символ «&»
    Но почему?

  14. Алексей — 22.12.2015 18:32

    :) Вопрос снят. Совсем забыл. Нужны ковычки одинарные.

Добавить комментарий