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


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

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

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

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

    http://images2015.cnblogs.com/blog/463190/201601/463190-20160108113835137-914032124.jpg
    因为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);
    
  • 相关阅读:
    Spring 配置数据源的几种方式
    Java List 数据操作
    javascript 数组方法解析
    jQuery 获取页面元素的属性值
    表格列排序
    优秀资源的收集
    Java 集合介绍
    二进制、八进制、十进制、十六进制的转换
    Nginx配置
    Nginx安装
  • 原文地址:https://www.cnblogs.com/JasonLeemz/p/5112636.html
Copyright © 2020-2023  润新知