我想将从数据库查询中获取的字段值替换为字符串中的对象数组,如下所示:
"My name is {name} and I live in {city}."
我找到了以下解决方案但只有在用普通字符串替换值时才有效,而不是使用对象属性:
preg_replace('/\{([a-z]+)\}/', "$row->\\1", $myString)
我收到此错误:类stdClass的对象无法转换为字符串。
为什么它无法评估$ row-> fielname?
最好的问候。
答案 0 :(得分: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);