Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP:str_replace的问题_Php_Arrays_Str Replace_Replace - Fatal编程技术网

PHP:str_replace的问题

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); 其

我注意到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);
其中:

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"

好啊那么这种情况的解决方案是什么呢?这正是我所需要的解释。非常感谢你,马丁!好啊那么这种情况的解决方案是什么呢?这正是我所需要的解释。非常感谢你,马丁!