Приветствую всех. Прошу помощи в организации древовидного JSON . Отсюда я получаю список каналов AceStream. Там список построен не сортированно. Для примера: Код (Text): [ { "infohash": "d3b4abd9951afb661a93e6add1206c3b68969dcb", "name": "\u0420\u0422\u0420-\u041f\u043b\u0430\u043d\u0435\u0442\u0430", "availability": 1, "availability_updated_at": 1610610542, "categories": [ "entertaining" ]}, { "infohash": "355b7b202743167fb9099f60210f7010ae3d17f0", "name": "\u041f\u044f\u0442\u043d\u0438\u0446\u0430", "availability": 1, "availability_updated_at": 1610610542, "categories": [ "entertaining", "movies", "music" ]}, { "infohash": "1eb03a5674f01828bfbe6a8967617eabd3973f23", "name": "\u041c\u0443\u0437-\u0422\u0412", "availability": 1, "availability_updated_at": 1610610542, "categories": [ "music" ]} ... ] Я загоняю данные в базу по соответствующим строкам. На выходе с базы я хочу получить данные в виде дерева с категориями и соответствующими им каналами. Например: Код (Text): [ "totalChannels": "-Всего каналов-", "totalCats": "-Всего категорий-", { "id": "1", "cat_name": "movies", "in_cat": "-Колличество каналов в разделе-", "lst": [{ "id": "15", "name": "Vip Premium", "categories": [ "movies" ]}, { "id": "27", "name": "TV100 ation", "categories": [ "movies" ]}, { "id": "85", "name": "Кинохит", "categories": [ "movies" ]}, ] }, { "id": "2", "cat_name": "educational", "in_cat": "-Колличество каналов в разделе-", "lst": [{ "id": "45", "name": "Discovery Science HD", "categories": [ "educational", "movies" ]}, { "id": "124", "name": "Discovery \u0420\u043e\u0441\u0441\u0438\u044f HD", "categories": [ "educational", "documentaries", "movies" ]}, { "id": "511", "name": "NASA TV", "categories": [ "educational" ]}, ] } ... ] Если канал подпадает под несколько категорий, то помещать его в первую, указанную в параметре "categories". Но не клонировать его на категории, к которым он подписал Если же канал не имеет привязки к категории - нет "categories", то подписать его к категории "без раздела". И это всё нужно выводить в JSON. Пока вывожу так: PHP: <?php $result = $conn->query("SELECT * FROM channels ORDER BY `number` ASC"); $dbdata = array(); while ( $row = $result->fetch_assoc()) { $dbdata[]=$row; } if(!headers_sent()) header('Content-Type: application/json; charset=utf-8', true,200); echo json_encode($dbdata,JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES); //Читаем юникод. Заранее благодарен за помощь.
PHP: <?php $json = file_get_contents('https://api.,,,,,,,'); $array = json_decode($json, true); $new_array = array(); foreach($array as $key => $value) { if(isset($array[$key]['categories'])) { $new_array[$array[$key]['categories'][0]][] = $value; } else { $new_array['no categories'][] = $value; } } echo '<pre>'; print_r ($new_array); ?>
Благодарствую, хорошо. Но мне нужно еще и идентифицировать (ID) отдельно каждый раздел и каждый канал. Я приводил пример: Код (Text): [ "totalChannels": "-Всего каналов-", "totalCats": "-Всего категорий-", { "id": "1", "cat_name": "movies", "in_cat": "-Колличество каналов в разделе-", "lst": [{ "id": "15", "name": "Vip Premium", "categories": [ "movies" ]}, { "id": "27", "name": "TV100 ation", "categories": [ "movies" ]}, { "id": "85", "name": "Кинохит", "categories": [ "movies" ]}, ] }, { "id": "2", "cat_name": "educational", "in_cat": "-Колличество каналов в разделе-", "lst": [{ "id": "45", "name": "Discovery Science HD", "categories": [ "educational", "movies" ]}, { "id": "124", "name": "Discovery \u0420\u043e\u0441\u0441\u0438\u044f HD", "categories": [ "educational", "documentaries", "movies" ]}, { "id": "511", "name": "NASA TV", "categories": [ "educational" ]}, ] } ... ]
PHP: ........ //echo '<pre>'; //print_r ($new_array); $totalChannels = count($array); $totalCats = count($new_array); echo '"totalChannels": "'.$totalChannels.'"<br>'; echo '"totalCats": "'.$totalCats.'"<br><br>'; foreach($new_array as $key => $value) { echo '<b>'.$key.':</b> <br>'; foreach($value as $v) { echo $v['name'].'<br>'; if (isset($v['categories'])) echo join('<br>', $v['categories']).'<br>------------<br>'; } }