2013-05-31 54 views
0

我想要json_encode我的數組我回來,所以我可以把它放在一個jQuery插件的數據源。我的問題是,我正在使用PDO來查詢我的數據庫以獲取數組,但是在執行print_r時,我看到我從數據庫中獲取的每個名稱都在它自己的數組中。我將如何將所有這些結果放入單個數組中,以便在執行我的json_encode時,所有這些都是用於jQuery插件的可讀字符串?統一用於JSON編碼的數組?

數據庫查詢(PDO) - 在做返回數組

$query = " 
      SELECT name 
FROM `clients` 
    ";  
    try 
    { 
     $stmt = $b3->prepare($query); 
     $stmt->execute(); 
    } 
    catch(PDOException $ex) 
    { 
     die("Failed to run query: " . $ex->getMessage()); 
    } 
    $players = $stmt->fetchAll(); 

例(注我有8000被退回,所以我將只發布前5個左右

print_r($players); 

Array 
( 

[0] => Array 
     (
      [name] => ! CBC.ZXR 
    ) 

[1] => Array 
    (
     [name] => ! marioxz 
    ) 

[2] => Array 
    (
     [name] => ! V v :] 
    ) 

[3] => Array 
    (
     [name] => !?! 
    ) 

[4] => Array 
    (
     [name] => !CU @ 1337 
    ) 

所以或多或少,我該如何統一我的陣列,以便當我做

json_encode($players["name"]); 

它將返回上面提到的名稱的單個JSON字符串。

編輯

目前代碼,

$query = " 
     SELECT name 
FROM `clients` 
";  
try 
{ 
    $stmt = $b3->prepare($query); 
    $stmt->execute(); 
} 
catch(PDOException $ex) 
{ 
    die("Failed to run query: " . $ex->getMessage()); 
} 
$playerNames = $stmt->fetchAll(PDO::FETCH_COLUMN, 0); 

json_encode($playerNames); 
var_dump(json_last_error()); 
+0

'json_encode' _returns_值,它不轉換它的參數。存儲這個值('$ playerNamesJson = json_encode($ playerNames);')和/或回顯它。現在你只是把結果扔掉。 – raina77ow

+0

@ raina77ow我已經這樣做了,但是對我來說這看起來不像正常的JSON字符串。 http://gophobia.com/beta/ajaxSearch.php –

+1

然而,它顯然是。檢查來源,而不是顯示給你的頁面。用[json validator](http://jsonlint.com/)檢查它的內容。 – raina77ow

回答

1

好了,你可以使用array_map結果行的陣列上創建名稱數組,像這樣:

$player_names = array_map(function($p) { return $p['name']; }, $players); 
+0

一旦我做了json_encode($ player_names);它什麼都不返回。 –

+0

它應該工作。 'var_dump($ player_names)'顯示什麼? – Barmar

+0

檢查這個[demo](http://ideone.com/clone/RDaBHe),它_does_ work - 除非你使用PHP 5.2(在這種情況下應該會顯示一個錯誤,因爲使用了匿名函數)。 – raina77ow

-1
$players = array 
(
    'name' => iterator_to_array(new RecursiveIteratorIterator(new RecursiveArrayIterator($players)), false), 
); 

Demo


使用PHP 5.5,你也有array_column()

+0

爲什麼downvote? –

2

如果你想只得到從您的數據庫查詢結果的第一列單級陣列,考慮通過在獲取類型您使用fetchall電話:

$playerNames = $sth->fetchAll(PDO::FETCH_COLUMN, 0); 

這將導致$ playerNames作爲您正在查找的格式的數組,您可以將其傳遞給json_encode或其他任何您想要的內容。有關提取選項的更多信息,可以在php文檔中看到示例(http://php.net/manual/en/pdostatement.fetchall.php)。

+1

+1,可能是最簡單的方法。 – raina77ow

+0

當我做json_encode時,它沒有返回任何東西。 http://gophobia.com/beta/ajaxSearch.php將顯示我回來的東西。這是一個相當龐大的陣列。出於同樣的原因,也可以使用 –

+0

+1。 –