服务报价 | 域名主机 | 网络营销 | 软件工具| [加入收藏]
 热线电话: #
当前位置: 主页 > php教程 > php教程 >

PHP使用数组依次替换字符串中匹配项

时间:2016-01-09 23:13来源:未知 作者:最模板 点击:
select * from table where ctime = [date-14] and ctime = [date-1]; 想把上面这句sql的中括号表示的日期依次换成下面的数组中的元素 array(2015-07-01,2015-07-15); 用正则匹配: 找到第一个中括号部分,用第一个

select * from table where ctime >= '[date-14]' and ctime <= '[date-1]';

想把上面这句sql的中括号表示的日期依次换成下面的数组中的元素
array('2015-07-01','2015-07-15');

  1. 用正则匹配:
    找到第一个中括号部分,用第一个元素替换,然后找第二个,再替换

  2. 用sprintf函数:
    因为日期已经计算好,按照顺序替换就可以了.

PHP使用数组依次替换字符串中匹配项
因为markdown写正则比较麻烦,这里就直接上图片了

ps:设想一下,如sql中只有一个需要替换的时间条件,就需要修改成

$sql = sprintf($sql,$arr[0])

说白了呢就是如果sprintf函数支持第二个参数是数组就太好了。查了一番之后确实可以有解决办法:

call_user_func_array() 官方的解释是:
call_user_func_array — 调用回调函数,并把一个数组参数作为回调函数的参数
mixed call_user_func_array ( callable $callback , array $param_arr )
把第一个参数作为回调函数(callback)调用,把参数数组作(param_arr)为回调函数的的参数传入。

也就是说:第一个参数是你想要使用的函数名(上文中的sprintf),第二个参数是将要使用函数的参数,只不过参数是以数组形式传给了call_user_func_array
ok,这样的话就可以实现动态的替换了

$param = $arr;
array_unshift($param,$sql);
$sql = call_user_func_array('sprintf',$param);
(责任编辑:最模板)
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
栏目列表
热点内容