php nested array for json output -
i run queries on 3 tables , i'm trying format results nested array. it's inner array thats got me stumped. sizes array should in beer array object outside of it. appreciated.
json
{ "brewerid": "41", "brewername": "prancing pony brewing", "beers": [ { "beerid": "816", "productname": "prancing pony amber ale", "ibu": "18.00", "abv": "5.00", "style": "amber ale" }, { "beerid": "817", "productname": "prancing pony copper ale", "ibu": "25.00", "abv": "5.80", "style": "indian pale ale" }, { "beerid": "837", "productname": "prancing pony pale ale", "ibu": "37.00", "abv": "5.50", "style": "pale ale" }, { "beerid": "838", "productname": "prancing pony india red ale", "ibu": "60.00", "abv": "7.90", "style": "indian pale ale" } ], "sizes": [ { "beerid": "816", "size": "330ml bottle" }, { "beerid": "816", "size": "330ml can" }, { "beerid": "837", "size": "345ml can" }, { "beerid": "837", "size": "375ml bottle" } ] }, php
$result = $func->getbrewers(); $json_response = array(); while ($row = mysqli_fetch_array($result)) { $row_array = array(); $row_array['brewerid'] = $row['brewerid']; $row_array['brewername'] = $row['brewername']; $row_array['beers'] = array(); $brewer_pk = $row['brewerid']; $beer_qry = $func->getbeers($brewer_pk); while ($beer_fet = mysqli_fetch_array($beer_qry)) { $row_array['beers'][] = array( 'beerid' => $beer_fet['beerid'], 'productname' => $beer_fet['productname'], 'ibu' => $beer_fet['ibu'], 'abv' => $beer_fet['abv'], 'notes' => $beer_fet['notes'], 'style' => $beer_fet['style'], ); $beer_pk = $beer_fet['beerid']; $size_qry = $func->getsizes($beer_pk); while ($size_fet = mysqli_fetch_array($size_qry)) { $row_array['sizes'][] = array( 'beerid' => $size_fet['beerid'], 'size' => $size_fet['size'], ); } } array_push($json_response, $row_array); } echo json_encode($json_response);
it seems misindented @ point , went wrong point on.
$result = $func->getbrewers(); $json_response = array(); while ($row = mysqli_fetch_array($result)) { $row_array = array( 'brewerid' => $row['brewerid'], 'brewername' => $row['brewername'], 'beers' => array() ); $brewer_pk = $row['brewerid']; $beer_qry = $func->getbeers($brewer_pk); while ($beer_fet = mysqli_fetch_array($beer_qry)) { $tmp = array( 'beerid' => $beer_fet['beerid'], 'productname' => $beer_fet['productname'], 'ibu' => $beer_fet['ibu'], 'abc' => $beer_fet['abv'], 'notes' => $beer_fet['notes'], 'style' => $beer_fet['style'], 'sizes' => array() ); $beer_pk = $tmp['beerid']; $size_qry = $func->getsizes($beer_pk); while ($size_fet = mysqli_fetch_array($size_qry)) { $tmp['sizes'][] = array( 'beerid' => $size_fet['beerid'], 'size' => $size_fet['size'], ); } $row_array['beers'][] => $tmp; } array_push($json_response, $row_array); } echo json_encode($json_response); in order simplify referencing somewhat, i've rewritten beers created in $tmp variable, has 'sizes' array various sizes appended. after beers , sizes added, $tmp added beers.
do note performing more database queries, (as requested) fetches sizes per beer , not last one.
Comments
Post a Comment