Убрать часть текста с динамическими данными
Есть строка. Например:
Name 1: Text | Name 2: 12 | Name 3: Other text | Name 4: 899 | etc
Как правильно, используя имя поля, убрать выбранные участки из этой строки. Чтоб получилось вот так:
Name 1: Text | Name 3: Other text | etc
Если это статические данные, то можно было бы вот так записать:
$array = array(
'| Name 2: 12 ',
'| Name 4: 899 ',
);
$value = str_replace( $array, '', $value );
Но, данные постоянно разные для имён. Это может быть Name 2: 41 и т.д..
Как правильно выбрать участок по имени и удалить его из строки?
Ответы (1 шт):
Автор решения: Slava Rozhnev
→ Ссылка
Используем функцию preg_replace с одной строкой или с массивом
<?php
$str = 'Name 1: Text | Name 2: 12 | Name 3: Other text | Name 4: 899 | etc';
// убираем одно поле
$field = 'Name 2';
$pattern = "/{$field}:[^\|]+\| /";
$result = preg_replace($pattern, '', $str);
print($result);
echo PHP_EOL;
//убираем несколько полей
$fields = ['Name 2', 'Name 4'];
$patterns = array_map(
fn($field)=>"/{$field}:[^\|]+\| /",
$fields
);
$result = preg_replace($patterns, '', $str);
print($result);