Я пытаюсь создать многоуровневый вложенный JSON, используя данные MySQL, используя PHP.
Мне понадобится этот JSON, чтобы позже я мог использовать jQuery для создания HTML-меню.
Но я в настоящее время изо всех сил пытаюсь создать мой многоуровневый вложенный JSON. Я нашел 100 подобных вопросов на веб-сайте Stackoverflow и google, но все они немного разные.
В принципе, у меня есть база данных MYSQL, которая выглядит так:
id post_title post_parent
1 test 1 0
2 test 2 1
3 test 3 1
4 test 4 0
5 test 5 3
6 test 6 5
7 test 7 5
Столбец post_parent
- это столбец, который связывает их вместе.
Я пробовал использовать следующий PHP-код, но вывод JSON ошибочен.
Мой текущий код PHP:
$return_arr= array();
$sql = mysqli_query($db_conx,"SELECT * FROM wp_posts WHERE post_status = 'publish' AND post_title !='Hello world!' AND post_title !='' ORDER BY post_title");
while ($row = mysqli_fetch_array($sql ,MYSQLI_ASSOC))
{
if( !isset( $return_arr[ $row['post_parent'] ] ) ) {
$return_arr[ $row['post_parent'] ] = array();
}
if( !isset( $return_arr[ $row['post_title'] ][ $row['post_title'] ] ) ) {
$return_arr[ $row['post_parent'] ][ $row['post_title'] ] = array();
}
}
echo json_encode($return_arr);
Результат приведенного выше кода выглядит так:
{
"0": {
"test 1": [],
"test 4": []
},
"1": {
"test 2": [],
"test 3": []
},
"3": {
"test 5": []
},
"5": {
"test 6": [],
"test 7": []
}
}
это не показывает правильные многоуровневые вложенные данные JSON.
Мог ли кто-нибудь проконсультироваться по этому вопросу?
Любая помощь будет оценена по достоинству.
РЕДАКТИРОВАТЬ:
Мне понадобится многоуровневая вложенная JSON, подобная этой структуре:
[
{
"post_title":"Test 1",
"children":[
{
"post_title":"test 3",
"children":[
{
"post_title":"test 5",
"children":[
{
"post_title":"test 6"
},
{
"post_title":"test 7"
}
]
}
]
},
{
"post_title":"test 2"
}
]
}
]
Поэтому я могу создать многоуровневое меню, подобное этому:
https://www.jqueryscript.net/demo/Menu-List-Generator-jQuery-renderMenu/index2.html
Сначала создайте массив со всеми дочерними элементами и используйте индекс post_parent как индекс. В приведенном ниже примере я назвал этот массив $ array_with_elements. После этого вам понадобится отдельная функция, чтобы вы могли использовать эту рекурсивную.
<?php
$array_with_elements = array();
$sql = mysqli_query($db_conx,"SELECT * FROM wp_posts WHERE post_status = 'publish' AND post_title !='Hello world!' AND post_title !='' ORDER BY post_title");
while ($row = mysqli_fetch_array($sql ,MYSQLI_ASSOC)) {
$array_with_elements[$row['post_parent']][] = $row;
}
function add_children($array_with_elements, $wp_level){
$nested_array = array();
foreach($array_with_elements[$wp_level] as $wp_post){
$obj = new stdClass();
$obj->title = $wp_post['post_title'];
$obj->id = $wp_post['ID'];
// check if there are children for this item
if(isset($array_with_elements[$wp_post['ID']])){
$obj->children = add_children($array_with_elements, $wp_post['ID']); // and here we use this nested function again (and again)
}
$nested_array[] = $obj;
}
return $nested_array;
}
// starting with level 0
$return_arr = add_children($array_with_elements, 0);
// and convert this to json
echo json_encode($return_arr);
?>