ddv88
@ddv88
Binance Futures

Как заменить теги в тексте на значения из массива?

Пусть существует массив с названиями файлов и какой-то плейн текст взятый из БД.
$arr = array('file1.exe', 'file2.exe', 'file3.exe');
$text = 'File1: [count]1[/count] File2: [count]2[/count] File3: [count]3[/count]';

Как менее затратно заменить [count][/count] на значения из массива?
Пробовал по всякому. Самое близкое оказалось:
foreach ($arr as $r) {
$result .= preg_replace('%\[count[^\]]*\](.*?)\[/count\]%', $r, $text);
}

Но как заменять их следуя принципу номер в [count]$[/count] равен значению в массиве?
  • Вопрос задан
  • 2242 просмотра
Решения вопроса 1
BedwaRe
@BedwaRe
Пиши код
Следуя советам (правильный вариант):
$arr = array('file1.exe', 'file2.exe', 'file3.exe');
$text = 'File1: [count]3[/count] File2: [count]2[/count] File3: [count]1[/count]';

echo preg_replace_callback(
	"/\[count\](.*?)\[\/count\]/",
	function($match) use ($arr) {return $arr[$match[1]-1];},
	$text
);

Старый вариант:
$arr = array('file1.exe', 'file2.exe', 'file3.exe');
$text = 'File1: [count]3[/count] File2: [count]2[/count] File3: [count]1[/count]';
preg_match_all("|\[count\](.*?)\[\/count\]|", $text, $tags);

foreach ($tags[0] as $key => $tag) {
	$text = str_replace($tag, $arr[$tags[1][$key]-1], $text);
}
echo $text;

Вывод:
File1: file3.exe File2: file2.exe File3: file1.exe
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы