PHP使用數組依次替換字符串中匹配項

jopen 8年前發布 | 9K 次閱讀 PHP SQL PHP開發

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

想把上面這句sql的中括號表示的日期依次換成下面的數組中的元素array('2015-07-01','2015-07-15');

  1. 用正則匹配:找到第一個中括號部分,用第一個元素替換,然后找第二個,再替換

  2. 用sprintf函數:因為日期已經計算好,按照順序替換就可以了.

因為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_arrayok,這樣的話就可以實現動態的替換了

$param = $arr;
array_unshift($param,$sql);
$sql = call_user_func_array('sprintf',$param);

來自: http://www.cnblogs.com/JasonLeemz/p/5112636.html

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!