0

我需要使用 PHP5 输出类似于以下内容的 JSON 响应:

{"success": true, "years": [{"yearnumber": 2012},{"yearnumber": 2013},...]}

我已经做到了:

$rt = array();
$rt["success"] = true;
$rt["years"] = array();
for ($i=date('Y') ; $i < (date('Y')+21) ; $i++) {
     $rt['years'][]= 'yearnumber:'.$i;
}
echo json_encode($rt);

当然,这不是实现我的目标的正确方法——而且它显然不会产生预期的结果。

我对 PHP 编程相当陌生,可以在这里稍微推动一下。谢谢。

4

2 回答 2

3

要得到这个(我认为你想要的最接近的有效 JSON):

{"success":true, "years":[2012,2013,...]}

您可以使用:

$rt = array();
$rt["success"] = true;
$rt["years"] = array();
for ($i=intval(date('Y')) ; $i < (date('Y')+21) ; $i++) {
     $rt['years'][]= $i;
}
echo json_encode($rt);
//{"success":true,"years":[2012,2013,2014,2015,2016,2017,2018,2019,2020,2021,2022,2023,2024,2025,2026,2027,2028,2029,2030,2031,2032]}

为了"years": [{"yearnumber": 2012}, {"yearnumber": 2013}]

您可以使用:

$rt = array();
$rt["success"] = true;
$rt["years"] = array();
for ($i=intval(date('Y')) ; $i < (date('Y')+21) ; $i++) {
     $rt['years'][]= array("yearnumber" => $i);
}
echo json_encode($rt);
//{"success":true,"years":[{"yearnumber":2012},{"yearnumber":2013},{"yearnumber":2014},{"yearnumber":2015},{"yearnumber":2016},{"yearnumber":2017},{"yearnumber":2018},{"yearnumber":2019},{"yearnumber":2020},{"yearnumber":2021},{"yearnumber":2022},{"yearnumber":2023},{"yearnumber":2024},{"yearnumber":2025},{"yearnumber":2026},{"yearnumber":2027},{"yearnumber":2028},{"yearnumber":2029},{"yearnumber":2030},{"yearnumber":2031},{"yearnumber":2032}]}

虽然在我看来是多余的

于 2012-07-17T19:03:01.460 回答
1

这个

{"success":true, "years":["yearnumber":2012,"yearnumber":2013,...]}

不是有效的 JSON。数组 ( []) 中不能有键,只有值。最好的解决方案(在这种情况下)是剪掉他们的钥匙,因为无论如何它们都是一样的(见 Esailija 的回答)

另一种方法是创建一个像这样的对象数组

{"success":true, "years":[{"yearnumber":2012},{"yearnumber":2013},...]}

要从 PHP 实现这一点:

$rt = array();
$rt["success"] = true;
$rt["years"] = array();
for ($i=intval(date('Y')) ; $i < (date('Y')+21) ; $i++) {
     $rt['years'][] = array('yearnumber' => $i);
}
echo json_encode($rt);
于 2012-07-17T19:08:31.277 回答