【发布时间】:2019-09-30 08:38:55
【问题描述】:
假设我在下面有一个字符串 $msg:
$msg = '$hello , ken (JX02), Your Orders $invoiceno has been delivered. Thank you.';
然后,我将搜索我之前定义的变量,如果是,我将从字符串中替换。
$hello = "morning!";
$msg = str_replace( '$hello' ,$hello,$msg);
这会给我:
morning! , ken (JX02), Your Orders $invoiceno has been delivered. Thank you.
没关系。但是如果变量没有定义,我想从字符串 $msg 中删除它。 假设我没有定义 $invoiceno,那么:
morning! , ken (JX02), Your Orders has been delivered. Thank you.
既然变量名不是固定的,是用户动态输入的,那么如何实现这个功能呢?
【问题讨论】:
-
你如何决定什么是变量名,什么不是?如果您只是使用前面的 $ 来决定,请先进行所有变量替换,然后删除所有以美元符号开头的单词。你知道如果你在你的第一个代码块中使用双引号包围字符串赋值,PHP 会为你做所有的变量名/值替换,对吧?
-
我已经处理了所有变量替换,主要问题是如何删除任何以美元符号开头且未从我的程序中定义的单词(应用类似 isset.. 之类的东西..)跨度>
-
一种方法是将
explode最终字符串放入一个数组中,向下扫描每个元素并检查您的条件,然后从数组中删除单词并在最后使用implode,或者只是在循环时构建字符串。事实上,您可以在整个操作中这样做。 -
快速注意:如果
$hello没有设置,你仍然会在开头使用那个逗号。如果$invoiceno未设置,而您在控制台上打印该字符串,则会留下两个空格。