如何将每一行数据组合在一起?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何将每一行数据组合在一起?相关的知识,希望对你有一定的参考价值。
在php中,我想将每一行加在一起。这是我自己的数据库的摘要示例:
c(CorporateID,CompanyName)
o(CorporateID,OutletID)
os(OutletID,StaffName)
数据:
c表:
CorporateID CompanyName
----------- -----------
1 A&B Company
o TABLE:
CorporateID OutletID
----------- --------
1 1
1 2
1 3
os TABLE:
OutletID StaffName
-------- ---------
1 Jeannie
1 Zoey
1 Jasmine
2 James
2 Catherine
3 Ada
PHP的一部分
$conn = new mysqli(server, dbuser, dbpw, db);
$query = "
SELECT o.*, c.*, os.*
FROM Outlet o, Company c, OutletStaff os
WHERE c.CorporateID = o.CorporateID
AND o.OutletID = os.Outlet_ID";
$result = $conn->query($query);
$outp = "[";
while($rs = $result->fetch_array(MYSQLI_ASSOC)) {
if ($outp != "[") {$outp .= ",";}
$outp .= '{"CompanyName":"'. $rs["CompanyName"].' - Outlet'. $rs["OutletID"].'",';
$outp .= '"Worker":"'.$rs["StaffName"].'"}';
}
$outp .="]";
$conn->close();
echo($outp);
输出
[{“ CompanyName”:“ A&B-Outlet1”,“ Worker”:“ Jeannie”},{“ CompanyName”:“ A&B-Outlet1”,“ Worker”:“ Zoey”},{“ CompanyName”:“ A&B-Outlet1”,“ Worker”:“ Jasmine”},{“ CompanyName”:“ A&B-Outlet2”,“ Worker”:“ James”},{“ CompanyName”:“ A&B-Outlet2”,“ Worker”:“ Catherine”},{“ CompanyName”:“ A&B-Outlet3”,“ Worker”:“ Ada”}]
如您所见,由于该插座中的工人不同,所以存在重复的companyname
。
这是我期望的:
[{“ CompanyName”:“ A&B-Outlet1”,“ Worker”:“ Jeannie,Zoey,Jasmine”},{“ CompanyName”:“ A&B-Outlet2”,“ Worker”:“ James,Catherine”},{“ CompanyName”:“ A&B-Outlet3”,“ Worker”:“ Ada”}]
能够做到吗?我个人认为与PHP的第13行有关:
$outp .= '"Worker":"'.$rs["StaffName"].'"}';
也许我需要循环然后放入变量中,然后放入此输出中?如何实现?
假设您的MySQL响应看起来像这样;
$result = [
[
"company_name" => "ABC",
"worker" => "Dipesh"
],
[
"company_name" => "CDE",
"worker" => "Ramesh"
],
[
"company_name" => "CDE",
"worker" => "Mukhesh"
]
];
您可以使用唯一键简单地创建一个关联数组,如下面的代码片段所示。
$res = [];
foreach($result as $value){
$company_name = $value['company_name'];
if( isset($res[$company_name]) ){
$res[$company_name] = array_merge($res[$company_name], [$value['worker']]);
}else{
$res[$company_name] = [$value['worker']];
}
}
然后组合键和值以使用php implode
函数轻松获得所需的响应。
$result = [];
foreach($res as $key => $val){
$result[] = [
'company_name' => $key,
'worker' => implode($val,",")
];
}
对于JSON
响应,您可以简单地调用json_encode($result)
以获取所需的输出。
[
{
"company_name": "ABC",
"worker": "Dipesh"
},
{
"company_name": "CDE",
"worker": "Ramesh,Mukhesh"
}
]
以上是关于如何将每一行数据组合在一起?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Laravel 的 Eloquent/Fluent 将每一行设置为相同的值?
与 Jetpack 导航一起使用时,TextField 会中断组合吗?