Замена нескольких строк с использованием str_replace не работает - PullRequest
0 голосов
/ 25 августа 2018

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 ]

0 голосов
/ 25 августа 2018

Если вы используете переменную, подобную этой [$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);

OR

Как сказал @ vivek_23 , вы должны просто использовать это:

$remove_page = str_replace($id,'', $site_pages);
0 голосов
/ 25 августа 2018

Изменение

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