2014-02-06 81 views
1

我正在做的是將數據庫查詢的結果集直接傳遞到Google DataTable中。 (Google visualization api here)。我的目標(至少這是我能想到使用它的方式,就是使用Google的ArrayToDataTable()函數。爲此,我需要我的查詢返回一個二維數組,我可以傳遞給這個函數。我最初嘗試使用PDO :: FETCH_ASSOC來完成這項工作,但是當我將結果編碼爲JSON時,我得到了一個谷歌API無法處理的行對象數組,然後我找到了this question,並且使用了PDO :: FETCH_NUM,我得到了一個2維數組,它與我想要的更接近,但它省略了列標題。從PDO查詢中返回列名稱的二維數組

是否有一種簡單的方法來獲取2維數組,其第一個條目是列名,並且每個後續條目是來自數據庫查詢的一行?我認爲這將是微不足道的,但我無法找到一個解決方案,沒有wr有一個功能來做到這一點。

謝謝 -Eric

編輯:

針對邁克爾的回答,我寫了這個:

function assocTo2dArray($array){ 
    $return = array(); 
    $return[] = array_keys($array[0]); 
    foreach($array as $row){ 
     $return[] = array_values($row); 
    } 
    return $return; 
} 

其達到相同的結果,但看起來乾淨了一點。

+0

你自己在編寫SQL查詢嗎? –

+0

是的,我正在寫我自己的查詢。 – EpicWally

回答

1

這假定你已經建立並執行了一個準備好的語句(名字爲$stmt)。

$results = array(); 

$n = 0; 
$fetchmode = PDO::FETCH_ASSOC; 
while (true) { 
    $row = $stmt->fetch($fetchmode); 

    if ($row == null) 
     break; 

    if ($n == 0) { 
     $results[0] = array(); //headers 
     $results[1] = array(); //first row 
     foreach ($row as $k => $v) { 
      $results[0][] = $k; 
      $results[1][] = $v; 
     } 

     $fetchmode = PDO::FETCH_NUM; 
    } else { 
     $results[] = $row; 
    } 

    $n++; 
} 

這應該做你正在尋找的。

+0

這個工作,我覺得可以這樣做。我只是希望有一個更清晰的方式,就像fetch_style可以作爲查詢的一部分,而不必查詢和操作結果集。 – EpicWally

+0

看着PDOStatement函數,我沒有看到一個簡潔的方法。它必須是一個fetchAll類型的函數,因爲你只想包含一次頭文件。您可以將列標題作爲第一行「手動」啓動結果數組,但誰願意呢?當然,對SQL的任何更改都有可能改變它! –

+0

此外,似乎有一個更乾淨的方式來做到這一點。 (編輯我無法弄清楚如何在評論中的代碼中進行此顯示......將其包含在原始文章中。) – EpicWally