簡體   English   中英

來自平面MySQL查詢結果的PHP嵌套數組

[英]PHP nested array from flat MySQL query result

我需要使用highcharts.com js創建折線圖。 該插件需要具有以下結構的JSON數據:

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
        )
)

我感謝您的幫助。

-和我

嘗試這樣的事情:

$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 ) );
$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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM