Убрать часть текста с динамическими данными

Есть строка. Например:

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);

PHP preg_replace online

→ Ссылка