替换字符串中的字段值


Replace fields values in a string

我想将从数据库查询中获得的字段值替换为字符串中的对象数组,如下所示:

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

我找到了以下解决方案,但只有当我用普通字符串替换值时才有效,而不是用对象属性:

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

我得到这样的错误:类stdClass的对象无法转换为字符串。

为什么它不能评估$row->fielname?

致以最良好的问候。

你问

为什么不能评估$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);