PHP удаление определенной строки в строке один раз - PullRequest
1 голос
/ 15 февраля 2020

Я недавно поиграл с использованием preg_replace в PHP, чтобы специально удалить строку один раз.

Однако у меня есть список чисел (345, 346 и я хочу удалить ", 346" для пример), и я продолжал сталкиваться с той же проблемой, что и удаление всей строки и оставление ее пустой.

Желаемые результаты:

345, 346
Removing ", 346"
Turns to
345
And also
345, 346, 347 removing ", 346"
Turns to 
345, 347

Код:

$oldpost = ", ".$_GET['id'];

$newposts = preg_replace($oldpost, "", $row['posts']);

Я пробовал это ранее и не нашел ничего, что, кажется, делает лучше.

Ответы [ 2 ]

0 голосов
/ 16 февраля 2020

В вашем коде у вас есть

$newposts = preg_replace($oldpost, "", $row['posts']);

, где вы фактически даете замену всей самой строки. Следовательно, он дает вам пустую строку, потому что ваш параметр 2 nd является пустой строкой.

Вы можете сопоставить точное 346 (если оно присутствует) с необязательным соответствием , и замените их пустой строкой. Таким образом, ваше регулярное выражение будет выглядеть так:

/(,?\s*346(\s|,|\b))?/

Фрагмент:

<?php

$oldpost = "345,346,347";
$newposts = preg_replace("/(,?\s*346(\s|,|\b))?/", "$2", $oldpost);
echo $newposts,PHP_EOL;

Демо: https://3v4l.org/MeSeK


Обратите внимание, что вышеприведенный подход работает нормально, но лучший способ решить эту проблему - explode запятая строка и сбросить местоположение в массиве, где есть 346 и implode это снова.

Фрагмент:

<?php

$oldpost = "345,346,347";
$posts = explode(",",$oldpost);

$index = array_search(346,$posts);

if($index !== false){
    unset($posts[$index]);
}

$new_post = implode(",",$posts);

echo $new_post;

Демонстрация: https://3v4l.org/qvSEN

Обратите внимание, что если есть несколько вхождений 346, вы можете использовать простой foreach для их отмены.

0 голосов
/ 15 февраля 2020

Документация здесь для preg_replace: https://www.php.net/manual/en/function.preg-replace.php

Попробуйте добавить значение для параметра "limit".

limit: максимально возможные замены для каждого шаблона в каждой строке темы. По умолчанию -1 (без ограничений).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...