まず SQL ステートメントを見てみましょう:
リーリー上記の SQL ステートメントの角括弧で示されている日付を、以下の配列の要素に置き換えたいと考えています: array('2015-07-01','2015-07-15');
通常のマッチングを使用します: 最初の角括弧部分を見つけて最初の要素に置き換え、次に 2 番目の角括弧部分を見つけて再度置き換えます
sprintf関数を使用: 日付は計算されているので、順番に置き換えるだけです。
マークダウンで正規表現を書くのが面倒なので写真だけ載せておきます
追記: SQL で置き換える必要がある time 条件が 1 つだけある場合、それを
に変更する必要があると想像してください。 リーリー率直に言うと、sprintf 関数が 2 番目のパラメーターが配列であることをサポートしていれば素晴らしいでしょう。いくつか調査した結果、確かに解決策がありました:
call_user_func_array() 公式の説明は次のとおりです:
call_user_func_array — コールバック関数を呼び出し、コールバック関数のパラメータとして配列パラメータを渡します
リーリー最初のパラメータをコールバック関数 (callback) として呼び出し、コールバック関数のパラメータとしてパラメータ配列 (param_arr) を渡します。
つまり、最初のパラメータは使用する関数の名前 (上記の sprintf)、2 番目のパラメータは使用する関数のパラメータですが、パラメータは次の形式で call_user_func_arrayok に渡されます。この場合、動的置換を実現できます
リーリー次に、str_replace — 部分文字列置換、配列置換を紹介します
手順
リーリーこの関数は文字列または配列を返します。この文字列または配列は、件名のすべての検索を replace で置き換えた結果です。
特別な置換要件 (正規表現など) がある場合は、この関数を使用して ereg_replace() と preg_replace() を置換する必要があります。
パラメータ
検索と置換が配列の場合、str_replace() はサブジェクトのマッピング置換を実行します。置換値の数が検索値の数より少ない場合は、空の文字列を使用して追加の置換が実行されます。 search が配列で replace が文字列の場合、検索での各要素の置換には常にこの文字列が使用されます。この変換では大文字と小文字は変わりません。
検索と置換が両方とも配列の場合、それらの値は順番に処理されます。
検索
見つける目標値、つまり針です。配列では複数のターゲットを指定できます。
交換
検索用の置換値。配列を使用して複数の置換を指定できます。
件名
置換を実行する配列または文字列。それが干し草の山です。
サブジェクトが配列の場合、置換操作はサブジェクト全体をスキャンし、戻り値も配列になります。
カウント
注: 指定すると、一致と置換の数が制御されます。
戻り値
この関数は、置換された配列または文字列を返します。
バージョンの説明
5.0.0ではcountパラメータが追加されました。
4.3.3 関数の動作が変更されます。古いバージョンにはバグがあります。検索と置換の両方のパラメータが配列の場合、空の検索インデックスはスキップされますが、置換の内部ポインタは同時に進められません。このエラーはPHPで発生します
4.3.3、このバグに依存するスクリプトは、最初に空のルックアップ値を削除して、元の動作をシミュレートする必要があります。
4.0.5 ほとんどのパラメータは配列にすることができます。
例
例 #1 str_replace() の基本的な例
リーリー例 #2 可能な str_replace() 置換例
メモ
注: この関数はバイナリ オブジェクトに対して安全に使用できます。
注意
交代順序を理解する
str_replace()は左から右に置換されるため、複数の置換を行うと以前に挿入した値が置換される可能性があります。例については、このドキュメントを参照してください。
注:
この関数では大文字と小文字が区別されます。 str_ireplace() を使用すると、大文字と小文字を区別しない置換が可能です。