Json数据按值使用php进行分组 [英] Json data Group by value using php
本文介绍了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屋!
查看全文