0

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

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

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

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

我收到此错误:类 stdClass 的对象无法转换为 string

为什么它不能评估 $row-> 字段名?

此致。

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 回答