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
中,那么它将完美地替换字符串。
答案 0 :(得分:2)
更改
$editgroup_users_array = "'" . implode ( "', '", $egu_explode ) . "'";
到
$editgroup_users_array = implode(",", $egu_explode);
AND
$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);
答案 1 :(得分:2)
如果您正在使用像这样的变量[$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);