[英]How to combine each row of data together?
In PHP, I want to add each row together.在 PHP 中,我想将每一行加在一起。
Here's a summarized example of my own database:这是我自己的数据库的总结示例:
c(CorporateID,CompanyName)
o(CorporateID,OutletID)
os(OutletID,StaffName)
Data:数据:
c TABLE: 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
Part of the PHP 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);
Output Output
[{"CompanyName":"A&B - Outlet1","Worker":"Jeannie"}, [{"CompanyName":"A&B - Outlet1","Worker":"Jeannie"},
{"CompanyName":"A&B - Outlet1","Worker":"Zoey"}, {"CompanyName":"A&B - Outlet1","Worker":"Zoey"},
{"CompanyName":"A&B - Outlet1","Worker":"Jasmine"}, {"CompanyName":"A&B - Outlet1","Worker":"Jasmine"},
{"CompanyName":"A&B - Outlet2","Worker":"James"}, {"CompanyName":"A&B - Outlet2","Worker":"James"},
{"CompanyName":"A&B - Outlet2","Worker":"Catherine"}, {"CompanyName":"A&B - Outlet2","Worker":"Catherine"},
{"CompanyName":"A&B - Outlet3","Worker":"Ada"}] {"CompanyName":"A&B - Outlet3","Worker":"Ada"}]
As you can see, there is repetitive companyname
, due to different worker in that outlet.如您所见,由于该商店的工人不同,因此出现了重复的companyname
。
Here's what I expect:这是我的期望:
[{"CompanyName":"A&B - Outlet1","Worker":"Jeannie, Zoey, Jasmine"}, [{"CompanyName":"A&B - Outlet1","Worker":"Jeannie, Zoey, Jasmine"},
{"CompanyName":"A&B - Outlet2","Worker":"James, Catherine"}, {"CompanyName":"A&B - Outlet2","Worker":"James, Catherine"},
{"CompanyName":"A&B - Outlet3","Worker":"Ada"}] {"CompanyName":"A&B - Outlet3","Worker":"Ada"}]
Is it able to do it?它能够做到吗? I personally feel that there is something to do with line 13 of the PHP:个人感觉跟PHP的第13行有关系:
$outp .= '"Worker":"'.$rs["StaffName"].'"}';
Maybe I need to loop then put into a variable, then put into this output?也许我需要循环然后放入一个变量,然后放入这个output?
How can I achieve it?我怎样才能实现它?
Suppose your MySQL response looks like this;假设您的 MySQL 响应如下所示;
$result = [
[
"company_name" => "ABC",
"worker" => "Dipesh"
],
[
"company_name" => "CDE",
"worker" => "Ramesh"
],
[
"company_name" => "CDE",
"worker" => "Mukhesh"
]
];
You could simply make a associative array with your unique key as shown by the code snippet below.您可以简单地使用您的唯一键创建一个关联数组,如下面的代码片段所示。
$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']];
}
}
And then combine the keys and values to get the response you require easily using php implode
function.然后结合键和值使用 php implode
function 轻松获得所需的响应。
$result = [];
foreach($res as $key => $val){
$result[] = [
'company_name' => $key,
'worker' => implode($val,",")
];
}
And for JSON
response you can simply call json_encode($result)
to get the required output.对于JSON
响应,您只需调用json_encode($result)
即可获得所需的 output。
[
{
"company_name": "ABC",
"worker": "Dipesh"
},
{
"company_name": "CDE",
"worker": "Ramesh,Mukhesh"
}
]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.