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 按相同值分组的主要内容,如果未能解决你的问题,请参考以下文章

如何对按顺序排列的相同值进行分组

MySQL:JSON 列值聚合到按属性分组的单个 JSON 对象中

如何将字符串序列化为 JSON 并按其中一个值分组?

按值分组 json 数组

MySQL更新列的序列号按具有相同值的字段分组

按 JSON 数组对 SQL 数据进行分组