使用str_replace替换多个字符串不起作用

时间:2018-08-25 09:02:57

标签: php arrays 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 个答案:

答案 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.phpb.phpc.phpd.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);