Php 如何使用日期元素值按yyyy-mm对JSON数据进行分组?
我有一些JSON数据,我想按月份重新组合,并最终使用PHP将每个组放入HTML无序列表中 当前的JSON:Php 如何使用日期元素值按yyyy-mm对JSON数据进行分组?,php,arrays,json,date,grouping,Php,Arrays,Json,Date,Grouping,我有一些JSON数据,我想按月份重新组合,并最终使用PHP将每个组放入HTML无序列表中 当前的JSON: [ { "title": "Lorem ipsum dolor sit amet, consectetur adipiscing elit.", "date": "2017-03-15" }, { "title": "Lorem ipsum dolor sit amet, consectetur adipiscing e
[
{
"title": "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
"date": "2017-03-15"
},
{
"title": "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
"date": "2017-03-08"
},
{
"title": "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
"date": "2017-02-25"
},
{
"title": "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
"date": "2017-02-14"
},
{
"title": "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
"date": "2016-12-25"
},
{
"title": "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
"date": "2016-01-06"
}
]
我认为下面的结构是我需要能够在无序列表中逐月反映出来的。请随意提出其他建议
{
"2017-03": [
{
"title": "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
"date": "2017-03-15"
},
{
"title": "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
"date": "2017-03-08"
}
],
"2017-02": [
{
"title": "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
"date": "2017-02-25"
},
{
"title": "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
"date": "2017-02-14"
}
],
"2016-12": [
{
"title": "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
"date": "2016-12-25"
}
],
"2016-01": [
{
"title": "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
"date": "2016-01-06"
}
]
}
希望这能奏效
$string='[
{
"title": "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
"date": "2017-03-15"
},
{
"title": "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
"date": "2017-03-08"
},
{
"title": "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
"date": "2017-02-25"
},
{
"title": "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
"date": "2017-02-14"
},
{
"title": "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
"date": "2016-12-25"
},
{
"title": "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
"date": "2016-01-06"
}
]';
$array=array();
$result=array();
$array= json_decode($string,true);
foreach($array as $value)
{
$key=explode("-", $value["date"]);
unset($key[2]);
$key=implode("-", $key);
$result[$key][]=$value;
}
echo json_encode($result,JSON_PRETTY_PRINT);
希望这能奏效
$string='[
{
"title": "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
"date": "2017-03-15"
},
{
"title": "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
"date": "2017-03-08"
},
{
"title": "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
"date": "2017-02-25"
},
{
"title": "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
"date": "2017-02-14"
},
{
"title": "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
"date": "2016-12-25"
},
{
"title": "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
"date": "2016-01-06"
}
]';
$array=array();
$result=array();
$array= json_decode($string,true);
foreach($array as $value)
{
$key=explode("-", $value["date"]);
unset($key[2]);
$key=implode("-", $key);
$result[$key][]=$value;
}
echo json_encode($result,JSON_PRETTY_PRINT);
这应该有助于:
<?php
$json = '[{
"title": "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
"date": "2017-03-15"
}, {
"title": "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
"date": "2017-03-08"
}, {
"title": "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
"date": "2017-02-25"
}, {
"title": "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
"date": "2017-02-14"
}, {
"title": "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
"date": "2016-12-25"
}, {
"title": "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
"date": "2016-01-06"
}]';
$json_decode_array = json_decode($json, true);
$result_set = [];
foreach ($json_decode_array as $key => $value) {
$new_key = explode("-", $value["date"]);
$result_set_key = $new_key[0] . '-' . $new_key[1];
$result_set[$result_set_key][] = $value;
}
print_r(json_encode($result_set,JSON_PRETTY_PRINT));
这应该有帮助:
<?php
$json = '[{
"title": "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
"date": "2017-03-15"
}, {
"title": "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
"date": "2017-03-08"
}, {
"title": "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
"date": "2017-02-25"
}, {
"title": "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
"date": "2017-02-14"
}, {
"title": "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
"date": "2016-12-25"
}, {
"title": "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
"date": "2016-01-06"
}]';
$json_decode_array = json_decode($json, true);
$result_set = [];
foreach ($json_decode_array as $key => $value) {
$new_key = explode("-", $value["date"]);
$result_set_key = $new_key[0] . '-' . $new_key[1];
$result_set[$result_set_key][] = $value;
}
print_r(json_encode($result_set,JSON_PRETTY_PRINT));
有几种方法可以做到这一点:
输入:
$json='[
{"title": "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
"date": "2017-03-15"},
{"title": "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
"date": "2017-03-08"},
{"title": "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
"date": "2017-02-25"},
{"title": "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
"date": "2017-02-14"},
{"title": "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
"date": "2016-12-25"},
{"title": "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
"date": "2016-01-06"}
]';
方法:()一个干净、快速的foreach循环
$array=json_decode($json,true);
foreach($array as $a){
$result[substr($a['date'],0,7)][]=$a; // truncate the dates before assigning as keys
}
echo json_encode($result,JSON_PRETTY_PRINT);
当substr()
专门为子字符串提取而设计时,只将生成的元素作为新的键插入日期explode()
是非常愚蠢的。有几种方法可以做到这一点:
输入:
$json='[
{"title": "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
"date": "2017-03-15"},
{"title": "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
"date": "2017-03-08"},
{"title": "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
"date": "2017-02-25"},
{"title": "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
"date": "2017-02-14"},
{"title": "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
"date": "2016-12-25"},
{"title": "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
"date": "2016-01-06"}
]';
方法:()一个干净、快速的foreach循环
$array=json_decode($json,true);
foreach($array as $a){
$result[substr($a['date'],0,7)][]=$a; // truncate the dates before assigning as keys
}
echo json_encode($result,JSON_PRETTY_PRINT);
当substr()
专门为子字符串提取而设计时,explode()
只插入生成的元素作为新键的日期是非常愚蠢的。您有不必要的逗号,
在json示例数据中,您有不必要的逗号,
在json示例数据中,这正是我想要的,谢谢。否决票一定是因为太简单了。@l3fty否决票是因为您提供了自己的代码的绝对0,并且几乎要求其他人为您做所有的工作。@Dimi因为我完全不知道如何按照我的要求去做。老实说,我一直在想,我必须将日期与当前日期进行比较,然后在每一行中循环。我曾想过把它贴出来,但我并没有用完全错误的代码让读者更加困惑,只是问了一个精确的问题。这不是stackoverflow的作用吗?我没有看到任何规则规定我必须提供示例代码。@l3fty我个人从不否决任何事情/任何人(仍然没有批评家徽章),但一般来说,任何没有任何代码的问题都会被视为家庭作业问题,因此被大多数人忽略。尝试链接一些您尝试过的东西,或者粘贴一些损坏的代码。这正是我想要的,谢谢。否决票一定是因为太简单了。@l3fty否决票是因为您提供了自己的代码的绝对0,并且几乎要求其他人为您做所有的工作。@Dimi因为我完全不知道如何按照我的要求去做。老实说,我一直在想,我必须将日期与当前日期进行比较,然后在每一行中循环。我曾想过把它贴出来,但我并没有用完全错误的代码让读者更加困惑,只是问了一个精确的问题。这不是stackoverflow的作用吗?我没有看到任何规则规定我必须提供示例代码。@l3fty我个人从不否决任何事情/任何人(仍然没有批评家徽章),但一般来说,任何没有任何代码的问题都会被视为家庭作业问题,因此被大多数人忽略。尝试链接您尝试过的一些内容,或者粘贴一些损坏的代码。