下面是我的 json,我将 json 转换为 php 数组,然后尝试按月份对其进行分组,以便同一个月的数据保留在一个数组中,就像一个数组下的二月数据一样。我尝试过使用 foreach 来启动,但没有得到正确的结果。
下面是我的代码:
{
"exam_dates": [
{"id":"1","uni_name":"uni1","exam_name":"University of Szeged Feb","exam_date":"02\/02\/2022","exam_mode":"Online","appl_deadline":"To be announced"},
{"id":"2","uni_name":"uni2","exam_name":"University of Szeged","exam_date":"21\/02\/2022","exam_mode":"Online","appl_deadline":"To be announced"},
{"id":"3","uni_name":"uni3","exam_name":"University of Szeged","exam_date":"22\/02\/2022","exam_mode":"Online","appl_deadline":"To be announced"},
{"id":"4","uni_name":"uni4","exam_name":"University of Szeged","exam_date":"32\/03\/2022","exam_mode":"Online","appl_deadline":"To be announced"}
]
}
$data = json_decode($body);
使用 exam_date 中的月份进行所需输出:
Array
(
[0] => Array
(
[February] => stdClass Object
(
[0] => Array
[id] => 1
[uni_name] => University of Szeged Feb
[exam_name] => University of Szeged Feb
[exam_date] => 02/08/2022
[exam_mode] => Online
[appl_deadline] => To be announced
)
[1] => Array
[id] => 1
[uni_name] => University of Szeged Feb
[exam_name] => University of Szeged Feb
[exam_date] => 02/08/2022
[exam_mode] => Online
[appl_deadline] => To be announced
)
[2] => Array
[id] => 1
[uni_name] => University of Szeged Feb
[exam_name] => University of Szeged Feb
[exam_date] => 02/08/2022
[exam_mode] => Online
[appl_deadline] => To be announced
)
)
[1] => Array
(
[March] => stdClass Object
[0] => Array
(
[id] => 2
[uni_name] => University of Szeged
[exam_name] => University of Szeged
[exam_date] => 03/06/2022
[exam_mode] => Online
[appl_deadline] => To be announced
)
)
)
)
我尝试使用这个但尚未关闭:
foreach ($data->exam_dates as $edates) {
$month_name = date("F", strtotime($edates->exam_date));
$month_key[][$month_name] = $edates;
echo "<pre>";
print_r($month_key);
}
你们真的很亲密。基本上你需要做的就是改变这一行
$month_key[][$month_name] = $edates;
至
$month_key[$month_name][] = $edates;
但是最好也使用更可靠的日期操作方式,因此我使用内置的 DateTime 类而不是
strtodate()
和 date()
$body = '{
"exam_dates": [
{"id":"1","uni_name":"uni1","exam_name":"University of Szeged Feb","exam_date":"02\/02\/2022","exam_mode":"Online","appl_deadline":"To be announced"},
{"id":"2","uni_name":"uni2","exam_name":"University of Szeged","exam_date":"21\/02\/2022","exam_mode":"Online","appl_deadline":"To be announced"},
{"id":"3","uni_name":"uni3","exam_name":"University of Szeged","exam_date":"22\/02\/2022","exam_mode":"Online","appl_deadline":"To be announced"},
{"id":"4","uni_name":"uni4","exam_name":"University of Szeged","exam_date":"22\/03\/2022","exam_mode":"Online","appl_deadline":"To be announced"}
]
}';
$data = json_decode($body);
#print_r($data);
foreach ($data->exam_dates as $edates) {
$d = (new DateTime())->CreateFromFormat('d/m/Y',$edates->exam_date);
// get month name
$month_name = $d->format('F');
//format date to USA format
$edates->exam_date = $d->format('m/d/Y');
$month_key[$month_name][] = $edates;
}
print_r($month_key);
结果
Array
(
[February] => Array
(
[0] => stdClass Object
(
[id] => 1
[uni_name] => uni1
[exam_name] => University of Szeged Feb
[exam_date] => 02/02/2022
[exam_mode] => Online
[appl_deadline] => To be announced
)
[1] => stdClass Object
(
[id] => 2
[uni_name] => uni2
[exam_name] => University of Szeged
[exam_date] => 02/21/2022
[exam_mode] => Online
[appl_deadline] => To be announced
)
[2] => stdClass Object
(
[id] => 3
[uni_name] => uni3
[exam_name] => University of Szeged
[exam_date] => 02/22/2022
[exam_mode] => Online
[appl_deadline] => To be announced
)
)
[March] => Array
(
[0] => stdClass Object
(
[id] => 4
[uni_name] => uni4
[exam_name] => University of Szeged
[exam_date] => 03/22/2022
[exam_mode] => Online
[appl_deadline] => To be announced
)
)
)
仅按月份分组而不考虑年份没有多大意义。这就是为什么我把这一年带进钥匙里。另外,日期格式选择得不好。
$groupedArray = [];
foreach($data->exam_dates as $dates){
$key = dateTime::createFromFormat('!d/m/Y',$dates->exam_date)->format('F Y');
$groupedArray[$key][] = $dates;
}
$groupedArray =
array (
'February 2022' =>
array (
0 =>
(object) array(
'id' => "1",
'uni_name' => "uni1",
// :