2013-10-11 45 views
4

正如標題狀態,我試圖用引導的Typeahead.js,它需要一個JSON字符串這樣PHP/jQuery - 如何將多維PHP數組轉換爲JSON字符串?

var subjects = ['PHP', 'MySQL', 'SQL', 'PostgreSQL', 'HTML', 'CSS', 'HTML5', 'CSS3', 'JSON']; 

但是我有一個多維數組,在做json_encode返回以下

[{"username":"Test1"},{"username":"Test2"},{"username":"Test3"},{"username":"Test4"},{"username":"Test5"},{"username":"Test6"}] 

當我嘗試使用此數組時,Typeahead.js拋出錯誤。

我該如何將多維轉換爲像例子那樣?

原始PHP陣列

Array 
(
[0] => Array 
    (
     [username] => Test1 
    ) 

[1] => Array 
    (
     [username] => Test2 
    ) 

[2] => Array 
    (
     [username] => Test3 
    ) 

[3] => Array 
    (
     [username] => Test4 
    ) 

[4] => Array 
    (
     [username] => Test5 
    ) 

[5] => Array 
    (
     [username] => Test6 
    ) 

) 

Desired outcome would be 

var subjects = ['Test1', 'Test2', 'Test3', 'Test4', 'Test5', 'Test6']; 
+2

json_encode()? – sircapsalot

+0

數組的結構與將其轉換爲JSON無關。首先,用你需要的數據創建一個PHP數組;然後,json_encode它。 – IMSoP

+0

你可以分享原始的PHP數組嗎? – Joseph

回答

5

您的原始陣列是2維的。你需要讓每個子陣列的元素,然後將其轉換成JSON:

echo json_encode(array_map(function($x) { return $x['username']; }, $original_array)); 

或者,您可以修復任何代碼創建擺在首位原始數組。爲什麼它將關聯數組放在每個元素中,而不僅僅是用戶名本身?將它們作爲關聯數組沒有太大意義,因爲如果它們只有一個元素,並且始終使用相同的鍵。

+0

完美..每天學習新的東西,我感謝你:)並回答你也問過,我只是從數據庫中使用PDO $ ginfo = $ stmt-> fetchAll();因爲我要求選擇用戶名FROM用戶 – Ariana

0

所以,首先你需要創建一個你想要的PHP數組。然後JSON編碼過程將自動產生正確的結果。你應該接受Barmar的回答是:

$flat_array = array_map(function($x) { return $x['username']; }, $array_of_arrays); 

這三種形式是代表同樣的事情只是不同的語法約定 - 六個字符串數組。

PHP陣列字面:

Array('Test1', 'Test2', 'Test3', 'Test4', 'Test5', 'Test6'); 

PHP print_r輸出:

Array 
(
    [0] => Test1 
    [1] => Test2 
    [2] => Test3 
    [3] => Test4 
    [4] => Test5 
    [5] => Test6 
) 

JSON:

[ "Test1", "Test2", "Test3", "Test4", "Test5", "Test6" ] 

即最後一個是當然也適用於JavaScript陣列文本語法的(自JSON只是Javascript的文字語法的標準化子集)。它也適用於許多其他語言,包括Perl,Python,Ruby,Haskell,Clojure,Erlang ......

但是關鍵是,結構就是你關心的。 JSON只是語法,很容易轉換爲和從。