我有一个MySQL结果,在json中看起来如下
[
{
industry: "Building",
province: "Gauteng",
status: "review"
},
{
industry: "Building",
province: "Gauteng",
status: "sent"
},
{
industry: "Air Conditioning",
province: "Cape Town",
status: "free"
}
]
我尝试获取此结果并生成一个如下所示的数组
{
Gauteng: {
Building: {
sold: 2,
free: 0
},
},
Cape Town: {
Air Conditioning: {
sold: 0,
free: 1
}
}
}
项目按省和行业分组,阵列的最后一级需要包含2个键"已销售" &安培; "自由&#34 ;.已售出被归类为已发送或评论的任何内容,免费是任何状态为免费的内容。
我的问题是我可以使数组到省>行业不知道如何检查和累计出售和免费的所有价值。
这是我目前使用的代码。
$query = DB::select("SELECT industry, province, status FROM messages WHERE MONTH(updated_at) = MONTH(CURDATE())");
$result = array();
foreach($query as $item) {
$result[$item->province][$item->industry] = array(
"sold" => 12,
"free" => 23
);
}
echo json_encode($result);
给了我上面的结果。
提前感谢任何帮助。
答案 0 :(得分:0)
使用您现有的MySQL查询,我相信这实现了您想要的目标:
foreach($query as $item) {
if(empty($result[$item->province][$item->industry])){
$result[$item->province][$item->industry] = array(
"sold" => 0,
"free" => 0
);
}
switch($item->status){
case('free'):
$result[$item->province][$item->industry]['free']++;
break;
case('sent' || 'review'):
$result[$item->province][$item->industry]['sold']++;
break;
}
}
如果该特定省份,行业组合尚不存在,请创建一个已售出且免费设置为0的数组项目。
然后根据项目状态+1到必要的密钥。
非常自我解释。