PHP:str_replace的问题
我注意到str_replace函数有一种奇怪的行为。 你能告诉我为什么我得到的不是2号中的3号,而是4号吗 情况如下:PHP:str_replace的问题,php,arrays,str-replace,replace,Php,Arrays,Str Replace,Replace,我注意到str_replace函数有一种奇怪的行为。 你能告诉我为什么我得到的不是2号中的3号,而是4号吗 情况如下: $pattern = array(1,2,3); $change = array(1,3,4); $sql = "SELECT * FROM %s WHERE no_1 IN (%s) AND no_2 IN (%s) AND no_3 IN (%s)"; $test_multiply[] = str_replace($pattern, $change, $sql); 其
$pattern = array(1,2,3);
$change = array(1,3,4);
$sql = "SELECT * FROM %s WHERE no_1 IN (%s) AND no_2 IN (%s) AND no_3 IN (%s)";
$test_multiply[] = str_replace($pattern, $change, $sql);
其中:
Array ( [0] => SELECT * FROM %s WHERE no_1 IN (%s) AND no_4 IN (%s) AND no_4 IN (%s) )
你能告诉我应该怎么做才能收到no_3而不是no_2吗?引用的文档说明:
因为str_replace替换了left to
对,它可能会取代以前的
执行多个操作时插入的值
替代品
我相信你正处于这种情况:
由于$pattern和$change数组中的第二项,您的no_2将被替换为no_3
但是,由于$pattern和$change数组中的thid项,no_3被替换为no_4
为了避免这种特定情况,您可以尝试颠倒这两个数组中项目的顺序:
$pattern = array(3, 2, 1);
$change = array(4, 3, 1);
您将得到以下结果:
SELECT * FROM %s WHERE no_1 IN (%s) AND no_3 IN (%s) AND no_4 IN (%s)
引用的文件说明:
因为str_replace替换了left to
对,它可能会取代以前的
执行多个操作时插入的值
替代品
我相信你正处于这种情况:
由于$pattern和$change数组中的第二项,您的no_2将被替换为no_3
但是,由于$pattern和$change数组中的thid项,no_3被替换为no_4
为了避免这种特定情况,您可以尝试颠倒这两个数组中项目的顺序:
$pattern = array(3, 2, 1);
$change = array(4, 3, 1);
您将得到以下结果:
SELECT * FROM %s WHERE no_1 IN (%s) AND no_3 IN (%s) AND no_4 IN (%s)
首先,将1替换为1,这样就可以了 从%s中选择*,其中%s中没有\u 1,%s中没有\u 2,%s中没有\u 3 然后,将2替换为3,以获得 从%s中选择*,其中%s中没有\u 1,%s中没有\u 3,%s中没有\u 3 然后将3替换为4,导致 从%s中选择*其中在%s中没有\u 1,在%s中没有\u 4,在%s中没有\u 4
也许你应该用另一个值代替2,而不是3,你可以稍后再替换 首先,您将1替换为1,这样就可以了 从%s中选择*,其中%s中没有\u 1,%s中没有\u 2,%s中没有\u 3 然后,将2替换为3,以获得 从%s中选择*,其中%s中没有\u 1,%s中没有\u 3,%s中没有\u 3 然后将3替换为4,导致 从%s中选择*其中在%s中没有\u 1,在%s中没有\u 4,在%s中没有\u 4
也许你应该用另一个值代替2,而不是3,你可以稍后再替换 因为一旦你用3替换2,下一次替换将始终用4替换3因为一旦你用3替换2,下一次替换将始终用4替换3如果你与一组针一起使用,每个针将在单独的STRU replace调用中被替换。你可以想象这样的事情在内部发生:
for ($i=0, $n=min(count($pattern),count($change)); $i<$n; $i++) {
$sql = str_replace($pattern[$i], $change[$i], $sql);
}
我在本例中使用了,但它也适用于
这样一来,更换的顺序就无关紧要了。您甚至可以交换两个值:
var_dump(str_replacep(array(1,2), array(2,1), "12")); // string(2) "21"
如果与一组针一起使用,则在单独的str_replace调用中替换每个针。你可以想象这样的事情在内部发生:
for ($i=0, $n=min(count($pattern),count($change)); $i<$n; $i++) {
$sql = str_replace($pattern[$i], $change[$i], $sql);
}
我在本例中使用了,但它也适用于
这样一来,更换的顺序就无关紧要了。您甚至可以交换两个值:
var_dump(str_replacep(array(1,2), array(2,1), "12")); // string(2) "21"
好啊那么这种情况的解决方案是什么呢?这正是我所需要的解释。非常感谢你,马丁!好啊那么这种情况的解决方案是什么呢?这正是我所需要的解释。非常感谢你,马丁!