Замена нескольких строк с использованием 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);
Другие вопросы по тегам