MYSQL преобразование запроса в JSON с моим PHP - PullRequest
0 голосов
/ 12 апреля 2020

Хотите знать, кто-нибудь может сказать мне, что я здесь делаю не так? Совсем новый для JSON и массивов и т. Д. c.

MYSQL запрос выполняется на phpAdmin нормально, а затем я пытаюсь преобразовать в JSON.

PHP:

$dbdata = array();
while ($row = mysqli_fetch_assoc($result)){
$key = $row['Delta'];
if(!isset($dbdata[$key])){
    $dbdata[$key] = array('Delta' => $key);
}
$dbdata[$key][]['Alpha'] = $row['Alpha'];
$dbdata[$key]['Beta'] = $row['Beta'];
$dbdata[$key]['Charlie'] = $row['Charlie'];
$dbdata[$key]['Zulu'] = $row['Zulu'];
}
echo json_encode($dbdata);

Я не могу понять, как заставить мой JSON выглядеть правильно, чтобы иметь возможность анализировать DataTable. Вот что я получаю:

 "dog": {
        "DELTA": "dog",
        "0": {
            "ALPHA": "dry food"
        },
        "BETA": "5",
        "CHARLIE": "6",
        "ZULU": "4216.125",
        "1": {
            "ALPHA": "canned food"
        },
        "2": {
            "ALPHA": "wet food"
        },
        "3": {
            "ALPHA": "wetfood"
        }

Я считаю, что мне нужно добраться до этого, чтобы мой Datatable мог его проанализировать и использовать. Что я делаю не так?

{"dog": {
    [0] "delta" : "dog",
        "Alpha": "value1",
        "Beta": "Value2",
        "Charlie": Value 3,
        "Zulu": Value 4
    },
    [1] "delta" : "cat",
        "Alpha": "value1",
        "Beta": "Value2",
        "Charlie": Value 3,
        "Zulu": Value 4
    }
}} 

MYSQL Оператор выбора, который отлично работает:

    (SELECT DELTA, ALPHA, BETA, CHARLIE, ZULU
      FROM table1
      WHERE id = '50' AND spec = 'DELTA1' AND ALPHA > 0
      ORDER BY ALPHA ASC
      LIMIT 10)
      UNION ALL
(SELECT......

Повторяется 5 раз для 5 различных значений DELTA, в результате чего получается 5 столбцов и 50 строк. Я ищу DELTA1, DELTA2, DELTA3, DELTA4, DELTA5 в качестве ключей с 10 ассоциативными (???) массивами под каждым DELTA (0-9 ??)

Я могу получить это ....

{
    "DELTA": "Delta4",
    "ALPHA": "Value1",
    "BETA": "6",
    "CHARLIE": "5",
    "ZULU": "3906.572"
},
{
    "DELTA": "Delta1",
    "ALPHA": "Value5",
    "BETA": "6",
    "CHARLIE": "5",
    "ZULU": "3906.572"
},
{
    "DELTA": "Delta2",
    "ALPHA": "Value1",
    "BETA": "6",
    "CHARLIE": "5",
    "ZULU": "3906.572"
},

Но как мне добраться до этого:

        "DELTA1": [0]{
                "ALPHA": "Value1",
                "BETA": "6",
                "CHARLIE": "5",
                "ZULU": "3906.572"
            },
                  [1]{
                "ALPHA": "Value1",
                "BETA": "6",
                "CHARLIE": "5",
                "ZULU": "3906.572"
            },
        "DELTA3": [0]{
                "ALPHA": "Value5",
                "BETA": "6",
                "CHARLIE": "5",
                "ZULU": "3906.572"
             },

Ответы [ 2 ]

1 голос
/ 12 апреля 2020

Исходя из вашей желаемой структуры вывода, я думаю, что вы ищете следующее:

$dbdata = array();
while ($row = mysqli_fetch_assoc($result)){
    $key = $row['DELTA'];
    if(!isset($dbdata[$key])){
        $dbdata[$key] = array();
    }
    $dbdata[$key][]= array('ALPHA' => $row['ALPHA'],
                           'BETA' => $row['BETA'],
                           'CHARLIE' => $row['CHARLIE'],
                           'ZULU' => $row['ZULU']
                           );
}
echo json_encode($dbdata);

Примечание. Я прописал в верхнем регистре ваши индексы массива, чтобы отразить то, что находится в данных в вашем вопросе (в отличие от кода), в зависимости от того, что на самом деле там, вам может понадобиться снова использовать их заглавные буквы.

1 голос
/ 12 апреля 2020

Я бы предложил вам построить данные для каждой строки отдельно, а затем добавить все это в массив, который вы строите. Таким образом вы можете быть уверены, что не добавите ключи к странным местам в $dbdata.

$dbdata = array();
while ($row = mysqli_fetch_assoc($result)){
    $rowdata = array('Delta' => $row['Delta']);
    $rowdata['Alpha'] = $row['Alpha'];
    $rowdata['Beta'] = $row['Beta'];
    $rowdata['Charlie'] = $row['Charlie'];
    $rowdata['Zulu'] = $row['Zulu'];

    $dbdata[] = $rowdata;
}
echo json_encode($dbdata);

Если альфа-бета charl ie et c - единственные столбцы в результате, и вы ' просто скопируйте их, вам нужно только одно назначение в пределах l oop:

while ($row = mysqli_fetch_assoc($result)){
    $dbdata[] = $row;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...