PHP JSON 按相同值分组
Posted
技术标签:
【中文标题】PHP JSON 按相同值分组【英文标题】:PHP JSON Group by the same value 【发布时间】:2015-08-29 05:10:24 【问题描述】:我正在考虑如何按具有相同值的对象对我的数组进行分组。
我从 mysql 查询得到这个结果:
|身份证 |姓名 |日期 |价值 | |----|-------------|--------------|----------| | 1 |杰夫 | 2014-12-01 | 5 | | 1 |杰夫 | 2015-12-01 | 8 | | 2 |大卫 | 2014-12-01 | 7 | | 2 |大卫 | 2015-12-01 | 6 |如果我使用 echo json_encode():
$json = 数组(); 而($row = mysqli_fetch_assoc($result)) $巴士 = [ 'id' => $row["id"], 'name' => $row["name"], '日期' => $row["日期"], '价值' => $行[“价值”] ]; array_push($json, $bus); 回声 json_encode($json);结果是:
[ “身份证”:“1”, “姓名”:“杰夫”, “日期”:“2014-12-01”, “价值”:“5” , “身份证”:“1”, “姓名”:“杰夫”, “日期”:“2015-12-01”, “价值”:“8” , “身份证”:“2”, “姓名”:“大卫”, “日期”:“2014-12-01”, “价值”:“7” , “身份证”:“2”, “姓名”:“大卫”, “日期”:“2015-12-01”, “价值”:“6” ]但是,有没有可能用php得到这样的json数组?
[ “身份证”:“1”, “姓名”:“杰夫”, “价值观”:[ “2014-12-01”:“5”, “2015-12-01”:“8” ] , “身份证”:“2”, “姓名”:“大卫”, “价值观”:[ “2014-12-01”:“7”, “2015-12-01”:“6” ] ]【问题讨论】:
您可能会在 PHP 中解析返回的数据。我没有足够的语言来肯定地回答。 显示从数据库获取记录的代码 我添加了从数据库获取记录的代码 你不应该用group by Name
之类的东西来改变你的请求吗?
【参考方案1】:
我不知道是否可以使用 sql 获取您想要的数据。
通常,我会使用 php 来完成这项工作
<?php
$json = array();
foreach ($array as $idx => $data)
//Id is not exists in json,create new data
if( !array_key_exists($data['Id'], $json) )//Id is unique in db,use Id for index ,you can find it easily
$json[$data['Id']]=array(
'Id' =>$data['Id'],
'Name'=>$data['Name'],
'Value'=>array(
$data['Date']=>$data['Value']
)
);
continue;
//Id is exists in json, append value
$json[$data['Id']]['Value'][$data['Date']] =$data['Value'];
$json = json_encode($json);
希望能帮到你
【讨论】:
这会在 $json 上创建 'Id' 的键......如果没有那里的键,我们怎么能做到呢? @BiswasKhayargoli 如果你的数据没有主键,你需要构建你的哈希方法来生成一个唯一的键,例如连接ID和名称的值作为哈希键,然后格式化结果。 为我工作..我的数据是数组中的城市和密码... Thnx【参考方案2】:试试这个
<?php
$json = array();
while ($row = mysqli_fetch_assoc($result))
if (is_array($json))
foreach ($json as $key => $val)
if ($val['Id'] == $row["id"])
$json[$key]['date'][] = $row["date"];
continue;
$json[] = array(
'id' => $row["id"],
'name' => $row["name"],
'date' => array($row["date"]),
'value' => $row["value"]);
echo json_encode($json);
【讨论】:
如果你举报不说明理由,那就是蹩脚 我来帮你。甚至我都不知道为什么它被标记了。 为什么会有 if (is_array) ??这将导致每次都是真的,不是吗? @BiswasKhayargoli 是的,在这个例子中是的,但是之前它可能被初始化为 null 或者在你将 json 重新分配给其他东西的循环中。我只是把它作为一种好的做法。以上是关于PHP JSON 按相同值分组的主要内容,如果未能解决你的问题,请参考以下文章