сделать вывод из массива с теми же ключами из базы данных - PullRequest
1 голос
/ 27 января 2020

Я получаю информацию из базы данных. Например, моя база данных выглядит следующим образом: я получаю информацию из базы данных. Например, моя база данных выглядит следующим образом:

-------------------------------------------------
    p_id | description_name | description_value |
-------------------------------------------------
    1    |        author    |          X1       |
-------------------------------------------------
    1    |        editor    |          X2       |
-------------------------------------------------
    2    |        author    |          Y1       |
-------------------------------------------------
    3    |        author    |          Z1       |
-------------------------------------------------
    3    |        editor    |          Z2       |
------------------------------------------------- ...

Так что в разделе кода php я использую этот метод, чтобы получить descriptions:

<?php
    ...

    $result5 = mysqli_query($conn,"SELECT * FROM `descriptions` ");

    while ($row5 = $result5 ->fetch_assoc()){ 

        $des[] = [(int) $row5['p_id'] ,[   $row5['description_name'] => $row5['description_value']]   ]  ;      

    }
    echo json_encode( $des);

?>

это вывод этого кода:

[[1,{"author": "X1"}],[1,{"editor": "X2"}],[2,{"author": "Y1"}],[3,{"author": "Z1"}],[3,{"editor": "Z2"}],[ ...

Но мой ожидаемый результат будет следующим:

[{"p_id" : 1,"author": "X1","editor": "X2"},{"p_id" : 2, "author": "Y1"},{"p_id" : 3,"author": "Z1","editor": "Z2"},{...

Я надеюсь, что под вашим руководством эта проблема будет решена для меня, спасибо .. .

1 Ответ

2 голосов
/ 27 января 2020

Этот код выполняет индексирование вашего вывода по значению p_id, а затем, если там уже нет каких-либо данных, он просто добавляет новый элемент с p_id. Затем он добавляет данные с элементами description_name и description_value ...

. В json_encode() используется array_values() для удаления индекса, используемого для построения данных ...

$des = [];
while ($row5 = $result5 ->fetch_assoc()){
    if ( !isset ($des[$row5['p_id']])){
        $des[$row5['p_id']] = ["p_id" => (int)$row5['p_id']];
    }
    $des[$row5['p_id']][$row5['description_name']] = $row5['description_value'] ;

}
echo json_encode(array_values( $des ));

с некоторыми тестовыми данными, это дает (плюс форматирование) ...

[
    {
        "p_id": 1,
        "editor": "X2",
        "author": "Y1"
    },
    {
        "p_id": 2,
        "editor": "X2"
    }
]
...