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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM