首页 > 解决方案 > 当它们具有相同的值时,如何将结果连接成一个字符串?

问题描述

我有一个使用 PHP 访问的数据库表。该表包含三列:idnamegroup。以下是表格内容的示例:

------------------------------------------------------
| id   | name   | group                              |
------------------------------------------------------
| 1    | Lucy   | 1                                  |
| 2    | Jane   | 1                                  |
| 3    | Emily  | 2                                  |
| 4    | Anne   | 1                                  |
| 5    | Kim    | 3                                  |
| 6    | Carrie | 3                                  |
------------------------------------------------------

我像这样在 PHP 中访问我的表:

SELECT * FROM table

我想生成以下字符串,每组一个字符串:

Lucy、Jane 和 Anne 是第 1 组(Lucy 的 id 是 1,Jane 的 id 是 2,Anne 的 id 是 4)。

Emily 是第 2 组(Emily 的 id 是 3)。

Kim 和 Carrie 是第 3 组(Kim 的 id 是 5,Carrie 的 id 是 6)。

我可以使用什么 PHP 函数从表的内容中自动生成这些字符串?

标签: phpsql

解决方案


您将进行这样的 SQL 查询:SELECT * FROM table在 php 方面,您将执行以下操作:

$groups = [];
foreach($data as $row) {
   if(!isset($groups[$row['group']]))
      $groups[$row['group']] = [];
   $groups[$row['group']][] = $row;
}
foreach($groups as $groupId => $users) {
    $out = "(".implode(", ", array_map(function($user) {
        return $user['name']."'s id is ".$user['id'];
    }, $users)).")";
    if(count($users) === 1)
        $out = $users[0]['name']." is group ".$groupId." ".$out.".";
    else {
        $lastUser = array_pop($users);
        $out = implode(", ", array_map(function($user) { return $user['name']; }, $users))." and ".$lastUser['name']." are group ".$groupId." ".$out.".";
    }
    echo $out."\n";
}

推荐阅读