【问题标题】:How to combine each row of data together?如何将每一行数据组合在一起?
【发布时间】:2020-03-05 10:04:54
【问题描述】:

在 PHP 中,我想将每一行加在一起。
这是我自己的数据库的总结示例:

c(CorporateID,CompanyName)
o(CorporateID,OutletID)
os(OutletID,StaffName)

数据:

c 表:

CorporateID   CompanyName
-----------   -----------
1             A&B Company

o 表格:

CorporateID   OutletID
-----------   --------
1             1
1             2
1             3

操作系统表:

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"].'"}';

也许我需要循环然后放入一个变量,然后放入这个输出?
我怎样才能实现它?

【问题讨论】:

标签: php sql arrays database sorting


【解决方案1】:

假设您的 MySQL 响应如下所示;

$result = [
    [
        "company_name" => "ABC",
        "worker" => "Dipesh"
    ],
    [
        "company_name" => "CDE",
        "worker" => "Ramesh"
    ],
    [
        "company_name" => "CDE",
        "worker" => "Mukhesh"
    ]
];

您可以简单地使用您的唯一键创建一个关联数组,如下面的代码 sn-p 所示。

$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"
  }
]

【讨论】:

    猜你喜欢
    • 2018-12-10
    • 2011-07-22
    • 1970-01-01
    • 2021-12-03
    • 1970-01-01
    • 2021-10-18
    • 2014-10-12
    • 2013-11-20
    • 2011-05-07
    相关资源
    最近更新 更多