`str_replace`有什么特别之处?

时间:2016-06-01 03:38:45

标签: php

我想编写一个函数,允许我用数组中的过多值替换字符串中令牌的重复,以便M.mapWHERE name = ? and age ?变为array('joe', 32)。 (我知道变量绑定不应该“手动”完成;我正在尝试对传递给雄辩的Where name = joe and age = 32语句的参数进行故障排除。)

我写了这个:

DB::select

但是php 5.6.20给了我这个错误:

function str_replace_array($search, array $replace, $subject ) {
    foreach ( $replace as $replacement ) {
        $subject = str_replace($search, $replacement,$subject,1);
    }
    return $subject;
}

我知道它是函数$ php -l str_replace_array.php PHP Fatal error: Only variables can be passed by reference in str_replace_array.php on line 5 Errors parsing str_replace_array.php ,因为用虚函数替换它允许它通过语法检查。虽然,没有一个变量与受让人和参数都有相同的变量 - 但是有什么迹象表明这在这个函数中不起作用吗?

manual entry并不表示任何参数都是通过引用传递的;它表示返回值,所有示例都显示赋值。

这里的交易是什么?

2 个答案:

答案 0 :(得分:4)

由于str_replace ( mixed $search , mixed $replace , mixed $subject [, int &$count ] )的最后一个参数是您直接设置为1,因此您需要将其设置为某个变量$count,因为其值将设置为.. $subject = str_replace($search, $replacement,$subject, $count); .. 执行的替换次数。所以改为:

public enum TrafficLightColor {
YELLOW,GREEN,RED
}

答案 1 :(得分:1)

str_replace的最后一个参数需要varible来保存计数,而不是替换n次;

使用preg_replace

function str_replace_array($search, $replace, $subject ) {
    foreach ( $replace as $replacement ) {
        $subject = preg_replace("/\?/", $replacement,$subject, 1);
    }
    return $subject;
}
echo (str_replace_array("?",array(1,2,3),"awdwad ? asdaw ? awdwa? awd"));

结果:“awdwad 1 asdaw 2 awdwa3 awd”