PHP json_encode数组的编程建议

时间:2012-07-17 18:57:48

标签: php arrays json

我需要使用类似于以下内容的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编程很新,可以在这里使用一点点。感谢。

2 个答案:

答案 0 :(得分: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}]}

虽然对我来说似乎是多余的

答案 1 :(得分: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);