Замена нескольких строк с использованием str_replace не работает
site_pages:
$site_pages = 'groups_permissions.php,b.php,c.php,d.php';
значения для замены:
$id = 'groups_permissions.php,b.php,c.php,d.php';
ожидаемый результат:should be empty
Я использую следующее для создания массива, используя приведенный выше список через запятую:
// THIS WILL CREAET ARRAY LIKE 'groups_permissions.php','b.php','c.php','d.php'
$egu_explode = explode(",", $id);
$editgroup_users_array = "'" . implode ( "', '", $egu_explode ) . "'";
// REPLACE FROM COLUMN
$site_pages = $db_con->query("SELECT site_pages FROM settings LIMIT 1")->fetchColumn();
$remove_page = str_replace([$editgroup_users_array], '', $site_pages);
$remove_commas = preg_replace("/,+/", ",", $remove_page);
$updated_pages = trim($remove_commas, ",");
echo $updated_pages;
ПРОБЛЕМА: Приведенный выше код не заменяет никакую строку и дает значения из site_pages
столбец, но если я помещу array('groups_permissions.php','b.php','c.php','d.php')
вручную в str_replace
тогда это заменяет последовательности отлично.
2 ответа
+ Изменить
$editgroup_users_array = "'" . implode ( "', '", $egu_explode ) . "'";
в
$editgroup_users_array = implode(",", $egu_explode);
А ТАКЖЕ
$remove_page = str_replace([$editgroup_users_array], '', $site_pages);
в
$remove_page = str_replace($editgroup_users_array, '', $site_pages);
ОБНОВЛЕНИЕ № 1
Лучше сделать напрямую,
$remove_page = str_replace($id,'', $site_pages);
ОБНОВЛЕНИЕ № 2
Если вы хотите заменить groups_permissions.php
,b.php
,c.php
,d.php
независимо от их порядка, передайте их в массиве, как показано ниже.
$remove_page = str_replace(array('groups_permissions.php','b.php','c.php','d.php'),'',$site_pages);
Или, в вашем случае, вы можете сделать лучше так
$remove_page = str_replace($egu_explode,'',$site_pages);
Если вы используете переменную, как это [$editgroup_users_array]
тогда он будет считать его массивом и выдаст, как показано ниже.
Array
(
[0] => 'groups_permissions.php', 'b.php', 'c.php', 'd.php'
)
и если вы используете его так прямо, как это:
str_replace(['groups_permissions.php', 'b.php', 'c.php', 'd.php'],'',$site_pages);
Это будет работать.
Так что ваши str_replace
функция не должна использовать []
как он будет конвертировать строку в массив. Таким образом, вы должны просто удалить скобки []
и использовать это.
$remove_page = str_replace($editgroup_users_array, '', $site_pages);
ИЛИ ЖЕ
Как сказал vivek_23, вы должны просто использовать это:
$remove_page = str_replace($id,'', $site_pages);