1

次の文字列があります

"Contarct Fields を任意の場所に入力し、{} で囲みます。フィールドの ID またはフィールドのフィールドコード ({25} または {FIELD_CONTRACTTEXT} など) を使用できます"

{25}これを{FIELD_CONTRACTTEXT}、データベースからの同等の値に置き換えたいと思います。はIDなので25、IDであるフィールドの名前を入れたかった25のです。

中かっこを置き換える例はたくさんありますが、このようなコンテンツを置き換えるための解決策はありません。私を助けてください、私は多くのことを試しました。

PS: の出現{}は動的であり25、静的な数ではなく、文字列内に複数存在する可能性があることに注意してください{}

4

1 に答える 1

1

preg_match_all()を使用してオカレンスを検索し、この配列を使用してデータベース内の値を検索し、その後str_replaceを使用して各値を置き換えることができます。

まず、すべてのオカレンスをフェッチする必要があります。

preg_match_all('/{(.*?)}/', $string, $matches, PREG_PATTERN_ORDER);

一致配列は次のようになります。

Array
(
    [0] => Array
        (
            [0] => {}
            [1] => {25}
            [2] => {FIELD_CONTRACTTEXT}
        )

    [1] => Array
        (
            [0] => 
            [1] => 25
            [2] => FIELD_CONTRACTTEXT
        )

)

次に、配列を循環して、置き換える必要のある個々の要素を見つけることができます。

以下を使用してデータベースをチェックし、値を置き換えることができます。

mysql_connect("localhost", "root", "");
mysql_select_db("data");

$string = "Enter Contarct Fields wherever you want and enclose it with {}.You can use field's id or field's fieldcode for example {25} or {FIELD_CONTRACTTEXT}";

preg_match_all('/{(.*?)}/', $string, $matches, PREG_PATTERN_ORDER);

foreach($matches[1] as $match) {
    $sql = mysql_query("SELECT * FROM table WHERE `element`='".addslashes($match)."'");
    if(mysql_num_rows($sql)==1){
        $row = mysql_fetch_assoc($sql);
        str_replace($string, "{".$match."}", $row['value']);
    }
}

echo $string; //echos final output with replaced values
于 2012-04-16T15:06:27.537 に答える