PHP: Заменять символы на элементы массива

SN
На сайте с 04.07.2013
Offline
84
2350

В переменной текст:

$var = "Текст<!--pt--> еще текст<!--pt-->много текста<!--pt--> ещё больше текста<!--pt--> допустим тут совсем чуть чуть тукста";

Так же есть четыре элемента массива:

$myrow['1'];

$myrow['2'];

$myrow['3'];

$myrow['4'];

Нужно последовательно заменить в переменной $var все <!--pt--> на элементы массива. Как это можно реализовать? Спасибо.

C
На сайте с 04.02.2005
Offline
291
#1

Искать по первому вхождению.

Цикл пока первое вхождение !=false

C
На сайте с 26.10.2013
Offline
54
#2

Поиграйте

str_replace(array('<!--pt-->'), $myrow, $var);

В доке написано, как будет вести себя функция при replace меньше subject, но не описана ситуация наоборот.

Навскидку не скажу, поэтому говорю "поиграйте"

str_replace -- Заменяет строку поиска на строку замены
Описание
mixed str_replace ( mixed search, mixed replace, mixed subject [, int &count] )

Эта функция возвращает строку или массив subject, в котором все вхождения search заменены на replace.

Если subject - массив, поиск и замена производится в каждом элементе этого массива, и возвращается также массив.

Если и search, и replace - массивы, то str_replace() использует все значения массива search и соответствующие значения массива replace для поиска и замены в subject. Если в массиве replace меньше элементов, чем в search, в качестве строки замены для оставшихся значений будет использована пустая строка. Если search - массив, а replace - строка, то replace будет использована как строка замены для каждого элемента массива search.
Услуги по парсингу данных (/ru/forum/939826), единоразовый и регулярный сбор данных. Любые объемы. Скрипты на PHP, создание и доработка, решение проблем с сайтами Пишите в личные сообщения или скайп
Оптимизайка
На сайте с 11.03.2012
Offline
396
#3


<?php

$a = 'test<br>test<br>test';
$replacement = ['1', '2', '3'];

$aa = explode('<br>', $a);
$max_items = min(count($aa) - 1, count($replacement));
array_walk($aa, function($item, $i) use (&$rslt, $replacement, $max_items) {
$rslt .= $item;
if ($i < $max_items)
$rslt .= $replacement[$i];
});
echo $rslt;
⭐ BotGuard (https://botguard.net) ⭐ — защита вашего сайта от вредоносных ботов, воровства контента, клонирования, спама и хакерских атак!
C
На сайте с 26.10.2013
Offline
54
#4

Не, как я выше написал - работать не будет

А вот так будет


$var = "Текст<!--pt--> еще текст<!--pt-->много текста<!--pt--> ещё больше текста<!--pt--> допустим тут совсем чуть чуть тукста";
$myrow = array("1", "2", "3", "4");
echo vsprintf(str_replace('<!--pt-->', '%s', $var), $arr);

Выведет

Текст1 еще текст2много текста3 ещё больше текста4 допустим тут совсем чуть чуть тукста

Оптимизайка
На сайте с 11.03.2012
Offline
396
#5
colorito:
А вот так будет

Прикольная идея, но если в исходной строке будет <!--pt--> больше, чем в массиве для замены, то будет ошибка.

C
На сайте с 26.10.2013
Offline
54
#6
Оптимизайка:
Прикольная идея, но если в исходной строке будет <!--pt--> больше, чем в массиве для замены, то будет ошибка.

Тогда вот так


echo vsprintf(str_replace('<!--pt-->', '%s', $var), array_pad($myrow, substr_count($var, '<!--pt-->'), ''));

Тогда все недостающее в массиве будет заменено ничем

Оптимизайка
На сайте с 11.03.2012
Offline
396
#7
colorito:
Тогда вот так

Ну и конечно нужно чтобы в исходной строке не встречалось символов процента ;)

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий