1

我在 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 函数可以做到这一点,并且可以在对象数组上工作?我想这是一个常见的问题,如果可能的话,我会尽量避免重新发明轮子。

4

2 回答 2

1

观看implode($separator, $array) http://www.php.net/manual/en/function.implode.php

但这仅适用于数组,因此您可能必须找到一个解决方法。

于 2013-09-28T22:18:41.347 回答
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

于 2013-09-28T22:22:59.053 回答