Reputation: 1681
I need to output a JSON response using PHP5 that looks similar to the following:
{"success": true, "years": [{"yearnumber": 2012},{"yearnumber": 2013},...]}
I have gotten as far as:
$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);
Ofcourse this is not the proper way to achieve my goal - and it obviously doesn't produce the desired results.
I am fairly new to PHP programming and could use a little push here. Thanks.
Upvotes: 0
Views: 2544
Reputation: 59343
This
{"success":true, "years":["yearnumber":2012,"yearnumber":2013,...]}
is not valid JSON. Arrays ([]
) can't have keys in them, only values. The best solution (in this scenario) is to just cut they keys since they're all the same anyway (See Esailija's answer)
Another way would be to create an array of objects like this
{"success":true, "years":[{"yearnumber":2012},{"yearnumber":2013},...]}
To achieve that from 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);
Upvotes: 1
Reputation: 140228
To get this (The closest valid JSON that would be what I think you want):
{"success":true, "years":[2012,2013,...]}
You can use:
$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]}
For "years": [{"yearnumber": 2012}, {"yearnumber": 2013}]
You can use:
$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}]}
Though it appears redundant to me
Upvotes: 3