0

データベースクエリから取得したフィールド値を、次のような文字列内のオブジェクトの配列として置き換えたいと思います。

"My name is {name} and I live in {city}."

次の解決策を見つけましたが、値をオブジェクトプロパティではなく、通常の文字列に置き換えた場合にのみ機能します。

preg_replace('/\{([a-z]+)\}/', "$row->\\1", $myString)

このエラーが発生します:クラスstdClassのオブジェクトを文字列に変換できませんでした。

$ row-> fielnameを評価できないのはなぜですか?

よろしくお願いします。

4

1 に答える 1

2

あなたは尋ねました

評価できない理由$row->fielname?

次のコード行の場合:

preg_replace('/\{([a-z]+)\}/', "$row->\\1", $myString)

それをよりよく理解するために、問題の文字列を見てください:

"$row->\\1"

PHPの二重引用符で囲まれた文字列変数の置換の規則を考慮に入れると、関数が呼び出される前に次のようになります。

***contents of the variable $row as string*** . '->\1'

$row文字列に変換できない場合(オブジェクトで発生する可能性があります)、致命的なエラーが発生します。

$row番号が含まれている場合は、次の42ようになります。

preg_replace('/\{([a-z]+)\}/', '42->\\1', $myString)

この例がお役に立てば幸いです。

おそらくやりたいことは次のとおりです。

preg_replace_callback('/\{([a-z]+)\}/', function($groups) use ($row) {
    return $row->{$groups[1]};
}, $myString);
于 2012-07-14T11:45:30.607 に答える