2014-05-06 14 views
1

我一直在尋找一個明確的答案,看起來是一個非常簡單的任務 - 不幸的是所有的解決方案,我可以找到(並有很多)使用不建議使用的mysql_fetch_assoc。PHP數據庫結果>數組> JSON(沒有棄用的mysql_fetch_assoc)

我所要做的就是從數據庫中獲取兩列結果集並以JSON格式回顯 - 我已經管理好了一切,除了一點 - 我無法工作如何獲取值輸入到使用array_push的二維數組(兩列數組)中。我最終將我的兩列值合併到一個數組中。下面是我做了什麼一個精簡版本:

header('Content-Type: application/json'); 
$mostPopularStm = $sparklyGenericPdoObj->prepare("SELECT views, thing FROM X"); 
$mostPopularStm->execute(); 
$mostPopularRS = $mostPopularStm->fetchAll(); 
echo '{data:'; 
$mostPopularJson = array(); 
foreach ($mostPopularRS as $mostPopularItem) 
{ 
array_push($mostPopularJson, $mostPopularItem["views"], $mostPopularItem["thing"]); 
} 
echo json_encode($mostPopularJson); 
echo '}'; 

這像這樣的生產輸出:

{data:["Monkeyface","43","Giblets","25","Svelte","22","Biriani","21","Mandibles","20"]} 

但我需要的是這樣的:

{data:["Monkeyface":"43","Giblets":"25","Svelte":"22","Biriani":"21","Mandibles":"20"]} 

我知道我可以創建一些手動來做到這一點,使用json_encode格式化每個循環的字符串,但它似乎效率低下。

任何指針將非常感激!

+2

您想要的JSON無效。數組是一個有序的值列表 - 不是鍵值對,它是一個對象。 '數據'也需要引號。 – kero

回答

1

您當前的數組類似於

array(0 => 'Monkeyface', 1 => 43, /* ... */); 

,但你需要一個像

array('Monkeyface' => 43, /* ... */); 

更換

array_push($mostPopularJson, $mostPopularItem["views"], $mostPopularItem["thing"]) 

通過

$mostPopularJson[$mostPopularItem["thing"]] = $mostPopularItem["views"]; 

而且

echo '{data:'; 
echo json_encode($mostPopularJson) 
echo '}'; 

最好使用:

echo json_encode(array('data' => $mostPopularJson)); 

正如kingkero說,你永遠不會得到你希望的結果,因爲它是無效的:

{data:["Monkeyface":"43" ... 

正確:

{ "data": { "Monkeyface": "43" ... 
+0

感謝您的意見。我明白'數據'需要引號 - 它只是我看到的一些FLOT示例省略了它們。 在您的第二個JSON示例中,您沒有使用方括號,但json_encode正在創建方括號(不是我) - 我是否錯過了某些內容? –

+1

方括號表示一個數組'''test',123]',而一個json數組永遠不會有一個鍵,索引就是元素的位置。 '{'括號表示對象(或php關聯數組):'{'test':123}'。 'json_encode'創建'['因爲你的數組並不像你認爲的那樣:-) – DanFromGermany

1

撰寫陣列像這樣:

$mostPopularJson [$mostPopularItem["thing"]] = $mostPopularItem["views"]; 
相關問題