Elcid_91
Elcid_91

Reputation: 1681

Programming advice for PHP json_encode array

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

Answers (2)

Hubro
Hubro

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

Esailija
Esailija

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

Related Questions