我在Wordpress中有一些自定义表格,用于存储关于人物的信息,链接到帖子,我希望能够生成数据摘要,特别是一句话:
"This post mentions 4 surnames: Brown, Jones, Robinson and Smith"
我目前提取的数据如下:
$surnames = $wpdb->get_results("
SELECT distinct lastname
FROM ".$wpdb->prefix."people
WHERE post_id='$post_id'
ORDER BY lastname asc");
返回一个对象数组,如下所示:
Array (
[0] => stdClass Object ([lastname] => Brown )
[1] => stdClass Object ( [lastname] => Jones )
[2] => stdClass Object ( [lastname] => Robinson )
[3] => stdClass Object ( [lastname] => Smith )
)
所以目前,我只是这样做:
foreach ($surnames as $surname) {$summary .= $surname->lastname.', ';}
返回:
Brown, Jones, Robinson, Smith,
显然不可接受。
是否有任何标准的PHP函数可以执行此操作,并且可以在对象数组上工作?我想这是一个常见的问题,我试图尽可能避免重新发明轮子。
答案 0 :(得分:1)
观看implode($separator, $array)
http://www.php.net/manual/en/function.implode.php
但这仅适用于数组,因此您可能需要找到一个解决方法。
答案 1 :(得分:0)
如果您将数据从数据库返回为数组而不是对象,则可以使用PHP 5.5的新array_column()函数:
$summary = implode(
', ',
array_column(
$surnames,
'lastname'
)
);
修改您的查询电话
$surnames = $wpdb->get_results("
SELECT distinct lastname
FROM ".$wpdb->prefix."people
WHERE post_id='$post_id'
ORDER BY lastname asc",
ARRAY_A
);
将使您返回关联数组而不是每个记录的对象
你可以使用类似的东西:
function str_lreplace($search, $replace, $subject) {
$pos = strrpos($subject, $search);
if($pos !== false) {
$subject = substr_replace($subject, $replace, $pos, strlen($search));
}
return $subject;
}
将最后,
替换为and