Как сгруппировать данные таблицы базы данных по двум столбцам и вывести как json?

Я пытаюсь получить JSON (PHP) от PhpMyAdmin (Mysql). На самом деле это должно выглядеть так:

[{ “converterno”: ”1”, “zoneno”: {“1a”, “codeid”:[“t1”,”t2”,”t3”]}, “zoneno”: {“1b”, “codeid”:[“t21”,”t0”,”t13”]}},{ “converterno”: ”2”, “zoneno”: {“2a”, “codeid”:[“t023”,”t9”,”t31”]}},………………………..

Но то, что я на самом деле получаю,

[{"converternumber":"1","zonenumber":{"0":"","codeid":["er"]}},{"converternumber":"1","zonenumber":{"0":"wr","codeid":["fxv"]}},{"converternumber":"2","zonenumber":{"0":"b2","codeid":["gffff"]}}]

И я не знаю, почему я получаю ноль в начале

Код PHP:

<?php
$db_name="app1";
$mysql_user="root";
$server_name="localhost";

$connectionn=mysqli_connect($server_name,$mysql_user,"",$db_name);
$n_converternumber= ["converternumber"];
$n_zonenumber= ["zonenumber"];
$n_codeid= ["codeid"];

$sql_query = "select * from addcode";
$result= mysqli_query($connectionn,$sql_query);

while ($row = mysqli_fetch_array($result)){
if(!isset($info[$row['converternumber']])){
$info[$row['converternumber']] = array(
'converternumber'=> $row['converternumber'],
'zonenumber' => array($row['zonenumber'],
'codeid' => array($row['codeid']))
);
}}
echo json_encode($info);
?>

Может кто-нибудь любезно сказать мне, где я иду не так в цикле «Пока».

Прошел весь код, относящийся к JSON в Переполнение стека, но не нашел ничего похожего или похожего. Перепробовал почти все и выложил это сейчас !!
Надеюсь, мне здесь помогут!

Таблица в базе данных:
Таблица добавочного кода

-1

Решение

Массив для zonenumber покрывает codeid элемент, а также …

"zonenumber":{"0":"","codeid":["er"]}

вам нужно закрыть массив для zonenumber на той же строке, в то время как вы закрывали его после codeid элемент…

  'zonenumber' => array($row['zonenumber']),
'codeid' => array($row['codeid'])

Вы также получаете только первые данные, так как добавляете данные, только если они еще не установлены …

  if(!isset($info[$row['converternumber']])){

Поскольку вы группируете его по 2 элементам, вы не можете просто проиндексировать массив converternumber как это не уникально. Я изменил его для поиска в массиве и добавить его, когда converternumber а также zonenumber подобные..

$info = [];
while ($row = mysqli_fetch_array($result)){
$exists = false;
foreach ( $info as &$existing )  {
if ( $existing['converternumber'] == $row['converternumber']
&& $existing['zonenumber'][0] == $row['zonenumber'] )  {
$exists = true;
$existing['codeid'][] = $row['codeid'];
break;
}
}
if(!$exists){
$info[] = array(
'converternumber'=> $row['converternumber'],
'zonenumber' => [$row['zonenumber']],
'codeid' => [$row['codeid']]
);
}
}

echo json_encode(array_values($info));
0

Другие решения

После продолжительных обсуждений вы, похоже, захотите структуру «дедушка-родитель-ребенок». Это очень легко сформировать, и полностью ассоциативная структура сделает ваши данные очень компактными и простыми для повторения.

* и вы должны использовать mysqli_fetch_assoc() вместо вздутие живота mysqli_fetch_array() потому что вы не собираетесь использовать проиндексированные элементы, которые он генерирует.

Код (Демо на основе скриншота вашей базы данных)

while ($row = mysqli_fetch_assoc($result)){
$info[$row['converternumber']][$row['zonenumber']][] = $row['codeid'];
}

Трехуровневый массив будет выглядеть так:

array (
1 =>
array (
'1a' =>
array (
0 => 'test007',
1 => 'test006',
2 => 'test0094',
3 => 'test0098',
4 => 'test010',
5 => 'test111',
6 => 'test 008',
7 => 'test112',
8 => 'test004',
9 => 'test002',
10 => 'test001',
),
23 =>
array (
0 => 'rg',
),
'2a' =>
array (
0 => 'test001',
1 => 'test003',
),
'feh' =>
array (
0 => 'ndo',
),
'wr' =>
array (
0 => 'fxv',
),
),
2 =>
array (
'1a' =>
array (
0 => 'test',
),
'b2' =>
array (
0 => 'gffff',
),
),
)
0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector