0

我正在尝试对我要返回的数组进行 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());
4

3 回答 3

2

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

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

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

于 2013-05-31T00:29:16.863 回答
1

好吧,您可以在结果行数组上使用array_map来创建名称数组,如下所示:

$player_names = array_map(function($p) { return $p['name']; }, $players);
于 2013-05-31T00:23:11.343 回答
-1
$players = array
(
    'name' => iterator_to_array(new RecursiveIteratorIterator(new RecursiveArrayIterator($players)), false),
);

演示


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

于 2013-05-31T00:27:16.007 回答