Json数据按值使用php进行分组 [英] Json data Group by value using php

查看:140
本文介绍了Json数据按值使用php进行分组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想显示球队排名是基于联盟组。



这是我的Json数据

  {rows:[ { 团队:{ ID:172725, 池子:1}, 统计:[{ Name: 打, 值:1},{ 名: 赢了,值 :1},{ 名称 : 丢失  值:0},{ 名称: 分, 值: 2.0},{ 名称: net_run_rate,值:+ 6.325}],等级:1},
{team:{id:172726,pool:3},stats:[{ : 打, 值:0},{ 名: 赢了, 值:0},{ 名: 迷失, 值:0},{ 名: points,value:0.0},{name:net_run_rate,value:+ 0.000}],rank:*},
{ :{ ID:172727, 池:2}, 统计:[{ 名称: 播放, 值:1},{ 名称: 赢, 值:1 },{ 名称: 丢失, 值:0},{ 名称: 分, 值: 1.0},{ 名称: net_run_rate, 值: +4.455}],rank:1},
{team:{id:172728,pool:1},stats:[{name: , 值:1},{ 名: 赢了, 值:0},{ 名: 迷失, 值:1},{ 名: 点, value:0.0},{name:net_run_rate,value: - 6.325}],rank:2},
{team:{id :172729, 池 :2}, 统计 :[{ 名称 : 播放 值:1},{ 名: 赢 值:0},{ 名称: 丢失, 值:1},{ 名称: 分, 值: 0.0},{ 名:net_run_rate,value: - 4.455}],rank:2}]}

当前用于输出代码的代码是:

  foreach($ read_json->行为$ item) {
$ id =空($ item-> team-> id)? :$ item-> team-> id;
$ pool = empty($ item-> team-> pool)? :$ item-> team-> pool;
$ rank =空($ item->等级)? :$ item-> rank;
$播放=空($ item-> stats [0] - >值)? 0:$ item-> stats [0] - > value;
$ won =空($ item-> stats [1] - >值)? 0:$ item-> stats [1] - > value;
$ lost = empty($ item-> stats [2] - > value)? 0:$ item-> stats [2] - > value;
$ points = empty($ item-> stats [9] - > value)? 0:$ item-> stats [9] - > value;
$ net_run_rate =空($ item-> stats [12] - >值)? 0:$ item-> stats [12] - > value;
echo $ lt; div> $ id< / div>< div> $ rank< / div>< div> $播放< / div>< div> $丢失< / DIV>< DIV> $点< / DIV>< DIV> $ net_run_rate< / DIV> \\\
;
echo< / div> \\\
;
}

我想按池号对它进行分组。请在这里查看结果:



< img src =https://i.stack.imgur.com/yQk3O.pngalt =在这里输入图片描述>

解决

 <$ c $您需要将每行分配给一个组数组,然后根据该数组打印内容。 c> $ pools = []; 

foreach($ read_json->行为$ item)
{
//定义这个子数组,如果它不存在的话。
if(!isset($ pools [$ item-> team-> pool]))
{
$ pools [$ item-> team-> pool] = [ ]。
}

//将此项目添加到此池的数组中。
$ pools [$ item-> team-> pool] [] = $ item;
}

//按键排序。
ksort($ pools);

foreach($ pools as $ pool_id => $ pool)
{
echo< h1> Pool $ pool_id< / h1>;

foreach($ pool as $ item)
{
$ id = empty($ item-> team-> id)? :$ item-> team-> id;
$ pool = empty($ item-> team-> pool)? :$ item-> team-> pool;
$ rank =空($ item->等级)? :$ item-> rank;
$播放=空($ item-> stats [0] - >值)? 0:$ item-> stats [0] - > value;
$ won =空($ item-> stats [1] - >值)? 0:$ item-> stats [1] - > value;
$ lost = empty($ item-> stats [2] - > value)? 0:$ item-> stats [2] - > value;
$ points = empty($ item-> stats [9] - > value)? 0:$ item-> stats [9] - > value;
$ net_run_rate =空($ item-> stats [12] - >值)? 0:$ item-> stats [12] - > value;

echo $< div> $ id< / div>< div> $ rank< / div>< div> $播放< / div>< div> $ won< / div> < DIV> $丢失< / DIV>< DIV> $点< / DIV>< DIV> $ net_run_rate< / DIV> \\\
;
}
}


I want to display team ranking be based on pool group.

Here is my Json Data

    {"rows":[{"team":{"id":172725,"pool":1},"stats":[{"name":"played","value":1},{"name":"won","value":1},{"name":"lost","value":0},{"name":"points","value":"2.0"},{"name":"net_run_rate","value":"+6.325"}],"rank":"1"},
{"team":{"id":172726,"pool":3},"stats":[{"name":"played","value":0},{"name":"won","value":0},{"name":"lost","value":0},{"name":"points","value":"0.0"},{"name":"net_run_rate","value":"+0.000"}],"rank":"*"},
{"team":{"id":172727,"pool":2},"stats":[{"name":"played","value":1},{"name":"won","value":1},{"name":"lost","value":0},{"name":"points","value":"1.0"},{"name":"net_run_rate","value":"+4.455"}],"rank":"1"},
{"team":{"id":172728,"pool":1},"stats":[{"name":"played","value":1},{"name":"won","value":0},{"name":"lost","value":1},{"name":"points","value":"0.0"},{"name":"net_run_rate","value":"-6.325"}],"rank":"2"},
{"team":{"id":172729,"pool":2},"stats":[{"name":"played","value":1},{"name":"won","value":0},{"name":"lost","value":1},{"name":"points","value":"0.0"},{"name":"net_run_rate","value":"-4.455"}],"rank":"2"}]}

Current php to code to output is :

foreach ($read_json->rows as $item) {               
$id = empty($item->team->id) ? "" : $item->team->id;                
$pool  = empty($item->team->pool) ? "" : $item->team->pool;
$rank = empty($item->rank) ? "" : $item->rank;  
$played = empty($item->stats[0]->value) ? "0" : $item->stats[0]->value;
$won = empty($item->stats[1]->value) ? "0" : $item->stats[1]->value;
$lost = empty($item->stats[2]->value) ? "0" : $item->stats[2]->value;               
$points = empty($item->stats[9]->value) ? "0" : $item->stats[9]->value;
$net_run_rate= empty($item->stats[12]->value) ? "0" : $item->stats[12]->value;                      
echo "<div>$id</div><div>$rank</div><div>$played</div><div>$won</div><div>$lost</div><div>$points</div><div>$net_run_rate</div>\n";
echo " </div>\n";
}

I want to group it as per the pool number. Please see the result here:

解决方案

You'll want to assign each row to a group array and then print content based on that.

$pools = [];

foreach ($read_json->rows as $item)
{
    // Define this sub-array if it does not exist.
    if (!isset($pools[$item->team->pool]))
    {
        $pools[$item->team->pool] = [];
    }

    // Add this item to this pool's array.
    $pools[$item->team->pool][] = $item;
}

// Sort by key.
ksort($pools);

foreach ($pools as $pool_id => $pool)
{
    echo "<h1>Pool $pool_id</h1>";

    foreach ($pool as $item)
    {
        $id = empty($item->team->id) ? "" : $item->team->id;
        $pool  = empty($item->team->pool) ? "" : $item->team->pool;
        $rank = empty($item->rank) ? "" : $item->rank;  
        $played = empty($item->stats[0]->value) ? "0" : $item->stats[0]->value;
        $won = empty($item->stats[1]->value) ? "0" : $item->stats[1]->value;
        $lost = empty($item->stats[2]->value) ? "0" : $item->stats[2]->value;
        $points = empty($item->stats[9]->value) ? "0" : $item->stats[9]->value;
        $net_run_rate= empty($item->stats[12]->value) ? "0" : $item->stats[12]->value;

        echo "<div>$id</div><div>$rank</div><div>$played</div><div>$won</div><div>$lost</div><div>$points</div><div>$net_run_rate</div>\n";
    }
}

这篇关于Json数据按值使用php进行分组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆