Создавайте вложенные объекты JSON с помощью PHP - PullRequest
0 голосов
/ 01 мая 2018

У меня есть следующая таблица MySQL:

id     desc     qty
--------------------
10      abc      5
20      xyz      12
30      qwe      9

Как я могу использовать запрос PHP / MySQL для создания следующего файла JSON?

{
"10":{"desc":"abc","qty":"5"},
"20":{"desc":"xyz","qty":"12"},
"30":{"desc":"qwe","qty":"9"}
}

Вот моя попытка

$query="SELECT id,desc,qty FROM table";
$result = @mysql_query($query);
while ($row=mysql_fetch_object($result))
{ 
    $data[]=$row;
}
echo json_encode($data);

Результатом является массив, и я не уверен, как правильно его отобразить

[
{"id":"10","desc":"abc","qty":"5"},
{"id":"20","desc":"xyz","qty":"15"},
{"id":"30","desc":"qwe","qty":"9"}
]

Любая помощь приветствуется

Ответы [ 2 ]

0 голосов
/ 01 мая 2018

Спасибо за редактирование вашего вопроса. Вы можете изменить структуру ваших результатов с помощью другого цикла:

foreach($data as $d)
  $r[$d->id] = ['desc' => $d->desc, 'qty' => $d->qty];
$data = $r;

прямо выше:

echo json_encode($data);

или вы можете настроить цикл while для получения того же результата:

$data[$row->id] = ['desc' => $row->desc, 'qty' => $row->qty];

или вы можете использовать столбец массива (снова прямо над json_encode):

$data = array_column($data, null, 'id');

В последнем примере вывод немного отличается, но вы все равно можете использовать его во многих ситуациях. Если вы не можете, первые два варианта предпочтительнее.

0 голосов
/ 01 мая 2018

Есть много способов добиться этого. Один из них ниже. изменяет учетные данные вашей базы данных и имя таблицы.

<?php 
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "myDB";
$conn = new mysqli($servername, $username, $password, $dbname);

if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

$sql = "SELECT * FROM TableName";
$result = $conn->query($sql);
$results_array =array();
if ($result->num_rows > 0) {
    while($row = $result->fetch_assoc()) {
        $results_array[$row['id']] = array(
                        'desc'=>$row['desc'],
                        'qty'=>$row['qty'],
                                );
    }
} else {
    echo "0 results";
}

$json_array = json_encode($results_array);
echo $json_array;

Результаты должны быть похожи

{
"1":{"desc":"abc","qty":"12"},
"2":{"desc":"xyz","qty":"54"}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...