为JSON编码统一数组?

时间:2013-05-31 00:13:48

标签: php mysql json pdo encode

我正在尝试json_encode我的数组我正在回来所以我可以将它放在数据源的jQuery插件中。我的问题是我使用PDO来查询我的数据库以获取数组,但是在执行print_r时,我看到我从数据库返回的每个名称都在它自己的数组中。我如何将所有这些结果放入一个数组中,这样当我执行json_encode时,它就是jQuery插件的一个可读字符串?

数据库查询(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());

3 个答案:

答案 0 :(得分:2)

如果您尝试使用数据库查询的第一列结果获取单级数组,请考虑将获取类型传递给fetchAll调用:

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

这应该导致$ playerNames是您正在寻找的格式的数组,您可以将其传递给json_encode或您想要的任何其他内容。有关获取选项的更多信息,您可以在php文档(http://php.net/manual/en/pdostatement.fetchall.php)中查看示例。

答案 1 :(得分:1)

好吧,你可以在生成的行数组上使用array_map来创建一个名字数组,如下所示:

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

答案 2 :(得分:-1)

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

<强> Demo


使用PHP 5.5,您还拥有array_column()