php - 当它们具有相同的值时,如何将结果连接成一个字符串?
问题描述
我有一个使用 PHP 访问的数据库表。该表包含三列:id
、name
、group
。以下是表格内容的示例:
------------------------------------------------------
| 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 函数从表的内容中自动生成这些字符串?
解决方案
您将进行这样的 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";
}
推荐阅读
- angularjs - Angularjs Material 检查所有并取消选中所有不工作?
- python - 从 django urls 错误运行的 websockets:RuntimeError:线程“Dummy-1”中没有当前事件循环
- java - com.fasterxml.jackson.databind.JsonMappingException:由于 Spring Boot 应用程序中的输入结束,没有要映射的内容
- c# - 从 ViewModel 访问附加的属性集合
- elasticsearch - 如何在 Elasticsearch 中部分删除索引数据
- ruby-on-rails - `has_many through:` 关系的问题
- python - 我可以使用部分实现来构建测试期望吗?
- python - 我需要使用函数“reduce”找到数字的阶乘
- git - 如何对私有的jelastic环境进行版本控制
- c# - 将 JSON 转换为字符串 c# 时使用 JsonConvert.DeserializeObject 出错