将SQL Distinct数据转换为php中的可读列表

时间:2013-09-28 22:14:10

标签: php wordpress

我在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函数可以执行此操作,并且可以在对象数组上工作?我想这是一个常见的问题,我试图尽可能避免重新发明轮子。

2 个答案:

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