平面MySQL查询结果中的PHP嵌套数组
我需要使用highcharts.com js创建一个折线图。该插件需要具有以下结构的JSON数据:平面MySQL查询结果中的PHP嵌套数组,php,mysql,arrays,json,Php,Mysql,Arrays,Json,我需要使用highcharts.com js创建一个折线图。该插件需要具有以下结构的JSON数据: series: [{ { name: 'book 2', data: [ 1970, 120, 2001, 50, 2005, 180, 2014, 50 ] }, { name: 'another book', data
series: [{
{
name: 'book 2',
data: [
1970, 120,
2001, 50,
2005, 180,
2014, 50
]
},
{
name: 'another book',
data: [
1970, 120,
2001, 50,
2005, 180,
2014, 50
]
}
}]
(数据只是一个例子)
我想从MySQL数据库中查询所需的数据。
使用PHP中的meekrodb.com库提取数据
$results = DB::query("SELECT booktitle, EditionNr, Year FROM editions");
到目前为止的查询将输出此平面阵列:
(
[0] => Array
(
[booktitle] => booktitle_a
[EditionNr] => 11
[Year] => 2012
)
[1] => Array
(
[booktitle] => booktitle_a (the same)
[EditionNr] => 12
[Year] => 2013
)
[2] => Array
(
[booktitle] => another_booktitle
[EditionNr] => 1
[Year] => 2000
)
...
顶级索引对应于查询结果的行。但是,数据输出必须是分层的。
如何将其转换为如下所示的嵌套数组
Array
(
[name] => book_title_a
[data] => Array
(
[0] => 2012, 11 // these are the rows Year (=2012) and EditionNr (=11th edition)
[1] => 2013, 12
)
[name] => another_book_title
[data] => Array
(
[0] => 2000, 1
[1] => 2011, 2
[2] => 2012, 3
)
)
我感谢你的帮助
-Andi试试这样的方法:
$data = array();
foreach ( $rows as $row ) {
$bookTitle = $row['booktitle'];
if ( !isset( $data[$bookTitle] ) ) {
$data[$bookTitle] = array( "name" => $bookTitle, "data" => array() );
}
$data[$bookTitle]['data'][] = array( $row['Year'], $row['EditionNr'] );
}
echo json_encode( array_values( $data ) );
谢谢它现在似乎起作用了。但是,我更改了一行,以便“data”数组中的键不会嵌套得太深:
$data[$bookTitle]['data'][=$row['Year'],“$row['EditionNr']
@vp_arth:你说得对,但不是$data[$bookTitle]['data'][]=array($row['Year',$row['EditionNr')代码>在数组中创建数组(因为[]和数组())?不,这正是你要问的,数据是数组,并在这里向这个数组添加[Year,Nr]对如果你有一个数字实体具有相同的书名,那么它将是data:[[Year1,Nr1],[Year2,Nr2]…]
在我前面的示例中,我把[]括号搞乱了,数组嵌套得太深了。现在更正它使用类是一种非常可读的方法,但是它为书名条目生成重复项,而不是对同一本书进行分组。
$result = array();
$prevbooktitle = '';
$book_count = 0;
foreach($tmp as $val){
if($val['booktitle'] != $prevbooktitle){
$result[$book_count]['name'] = $val['booktitle'];
$book_count++;
$prevbooktitle = $val['booktitle'] ;
}
$result[$book_count]['data'][] = array($val['Year'],$val['EditionNr']);
}
$series = new stdClass();
$JSONBooksArray = array();
foreach($books AS $book){
$jsonbook = new stdClass();
$jsonbook->name = $book['booktitle'];
$bookdata = array();
$bookdata[0] = $book['Year'];
$bookdata[1] = $book['EditionNr'];
$jsonbook->data = $bookdata;
$JSONBooksArray[] = $jsonbook;
}
$series->series = $JSONBooksArray;
echo json_encode($series,JSON_PRETTY_PRINT);