Php 用多变量替换字符串

Php 用多变量替换字符串,php,Php,我想替换字符串中的一些文本,但是,它有多个变体 我有多个字符串要替换,我正在循环它一个接一个地替换。。例如 $string1 = 'select * from table where id = :id'; $string2 = 'select * from table where id =:id'; $string3 = 'select * from table where id = :id'; 等等 我正在用“id in(:id)”替换“id=:id”。 所以对于$string1,结果应该

我想替换字符串中的一些文本,但是,它有多个变体

我有多个字符串要替换,我正在循环它一个接一个地替换。。例如

$string1 = 'select * from table where id = :id';
$string2 = 'select * from table where id =:id';
$string3 = 'select * from table where id =  :id';
等等

我正在用“id in(:id)”替换“id=:id”。 所以对于$string1,结果应该是“
select*from table where id in(:id)
”,对于其他字符串也是如此

然而,每个变量都是不同的,这个
id=:id
可以是
id=:id
id=:id
。。。有些有不同的间距

目前,我正在使用下面的代码,但没有意识到,一些变量有多个空格

$sql = str_replace(array("=:id", "= :id"), " in (:id)", $string);
是否可以通过删除多余的空格,在不手动替换每个变量的情况下执行此操作?我试图避免手动执行此操作,因为我从数据库中获取这些变量,有些人会使用过多的空间输入数据库,而我对此没有控制权。

您可以使用这些变量来替换它们,而与它们包含的空间数无关:

$sql = preg_replace("/ *= *:id/", " in (:id)", $string);

你可以试试这个。

这背后的动机是什么?是不是pdo也这么做了?@Kevin我想用“in”来代替“=”。。不确定pdo如何替换它?只需用pdo计算准备好的语句中的有效负载数,并将问号占位符
id放入(?,?)
中,如果让我们假设3个id输入。不需要进行字符串操作嗨,我怎么会出错。。。解析错误:语法错误,意外的'in'(T_字符串),预期为','或',我编辑:哦,nvm,我已经修复了它,谢谢!。。。它工作得很好!有一个错误的
,请在我的答案中使用当前代码重试。preg_replace(“/*=*:id/”,“in(:id)”,$string);@nodeeffect啊!抱歉,删除
,请参阅我的编辑。我测试了它,效果良好。