У меня есть этот запрос, который я выполнил для сбора данных из трех таблиц. Я хочу создать JSON из собранных данных. Для его создания я написал следующий скрипт. Пожалуйста, направляйте меня, если есть быстрое или умное обходное решение для этого.
Это моментальный снимок моего результата базы данных, который мне нужно создать JSON:
Сценарий, который я использую, – это.
$jsonarray = array(); while ($i<count($result)) { $channel_cat = Array("Channel Category" => Array("name" => $result[$i]['chanct_name'])); $id = $result[$i]['chanct_id']; while($id == $result[$i]['chanct_id']) { $content[] = Array( "Channel Name" => $result[$i]['con_name'], "image" => $result[$i]['con_image']); $i++; } $jsonarray[][] = Array($channel_cat, $content); unset($content); } echo json_encode($jsonarray);
Это дает мне результат, вставленный ниже.
[[[{"Channel Category":{"name":"Movie"}}, [{"Channel Name":"Channel1","image":"Thanks.jpg"}, {"Channel Name":"Channel2","image":"Thanks.jpg"}, {"Channel Name":"Channel4","image":"amazon-logo-b_tpng.png"}, {"Channel Name":"High","image":"Thanks.jpg"}]]] ,[[{"Channel Category":{"name":"Documentary"}}, [{"Channel Name":"Channel7","image":"amazon-logo-b_tpng.png"}]]]]
Однако я ищу результат ниже.
{ "channelsCategories": [ { "name":"Movie", "image": "MoviePoster", "contents": [ { "name":"Channel 1", "image":"Thanks.jpg", }, { "name":"Channel 2", "image":"Thanks.jpg", }, { "name":"Channel 4", "image":"amazon-logo...", }, { "name":"High", "image":"Thanks.jpg", } ] }, { "name":"Documentary", "image": "MoviePoster", "contents": [ { "name":"Channel 7", "image":"amazon.....", } ] } ] }
Любая помощь или руководство будут действительно полезными.
Попробуйте это, это даст вам результат, который вы ожидаете:
$typeArr = array(); foreach($result as $a){ $typeArr[$a['chanct_name']][] = array( 'name'=>$a['con_name'], 'image'=>$a['con_image'] ); } $jsonarray = array(); foreach($typeArr as $type=>$contents){ $jsonarray['channelsCategories'][] = array( 'name'=>$type, 'contents'=>$contents ); } echo json_encode($jsonarray);