2013-02-13 53 views
2

我正在使用PHP工作。我有一个这样的字符串: “AND day_1> = day_2和day_1 < day_3” ,我想,以取代第一> =与<,我想替换第二<与> =如何将<< with > =和>替换为<=,并用<替换为<= with >和> =如果它们在同一个字符串中出现多次?

换句话说,我想扭转日期范围逻辑:

“AND day_1> = day_2和day_1 < day_3”

我想逆转这个样子:

“AND day_1 < day_2和day_1> = day_3 “

这里是我的代码:

$str = "AND day_1 >= day_2 AND day_1 < day_3"; 
echo "{$str}<br>"; 
$old_replace = array(">=", "<=", "<", ">"); 
$new_replace = array("<", ">", ">=", "<="); 
$count = 1; 
$str = str_replace($old_replace, $new_replace, $str, $count); 
echo $str; 

当我尝试使用字符串替换它这样做:

之前更换:AND day_1> = day_2和day_1 < day_3 后替换:AND day_1 < = = day_2和day_1 < == day_3

+0

你想达到什么目的?这可能不是最好的解决方法。 – Hammerite 2013-02-13 17:23:10

+0

是的,我也开始这么想......我试图做的是以编程方式反转sql语句,但现在我意识到我需要改变第二个AND和OR并添加括号以使该声明在逻辑上颠倒过来。 – 2013-02-13 19:01:00

回答

2

试试这个:

$replacements = Array("<="=>">",">="=>"<","<"=>">=",">"=>"<="); 
$str = strtr($str,$replacements); 
+0

谢谢!当我反转这些参数并将$ str放在第一位时,这是有效的,而$替换为第二。但我越看这个问题,就越需要我。现在我发现语句要真正逻辑反转,我还需要将第二个AND更改为AND,并将该字符串包装在括号中:第一个括号(在第一个AND和第二个括号之后)在字符串末尾。 – 2013-02-13 19:04:32

+0

对不起,我已经用'preg_replace_callback'开始了,忘了改变参数的顺序。很高兴你能弄清楚 - 所以很多人似乎都无能为力...... – 2013-02-13 19:18:16

相关问题