使用 str_replace 替换多个字符串不起作用
Replacing multiple strings using str_replace not working
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
中,那么它会完美地替换字符串。
改变
$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);
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
中,那么它会完美地替换字符串。
改变
$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);