我正在尝试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());
答案 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()
。