PHP数据库结果>数组> JSON(没有弃用的mysql_fetch_assoc)

时间:2014-05-06 10:22:40

标签: php json

我一直在寻找一个看似真正简单的任务的明确答案 - 遗憾的是我能找到的所有解决方案(并且有很多)都使用了不推荐使用的mysql_fetch_assoc。

我所要做的就是从数据库中获取两列结果并以JSON格式回显 - 我已经管理好一切,除了一点 - 我无法工作如何获取值使用array_push到二维数组(两列数组)。我最终将我的两个列值合并到一个数组中。这是我所做的一个剥离版本:

header('Content-Type: application/json');
$mostPopularStm = $sparklyGenericPdoObj->prepare("SELECT views, thing FROM X");
$mostPopularStm->execute();
$mostPopularRS = $mostPopularStm->fetchAll();
echo '{data:';
$mostPopularJson = array();
foreach ($mostPopularRS as $mostPopularItem)
{
array_push($mostPopularJson, $mostPopularItem["views"], $mostPopularItem["thing"]);
}
echo json_encode($mostPopularJson);
echo '}';

这产生如下输出:

{data:["Monkeyface","43","Giblets","25","Svelte","22","Biriani","21","Mandibles","20"]}

但我需要的是:

{data:["Monkeyface":"43","Giblets":"25","Svelte":"22","Biriani":"21","Mandibles":"20"]}

我知道我可以手动创建一些东西,使用json_encode格式化每个循环上的字符串,但效果似乎很低。

任何指针都会非常感激!

2 个答案:

答案 0 :(得分:1)

像这样编写你的数组:

$mostPopularJson [$mostPopularItem["thing"]] = $mostPopularItem["views"];

答案 1 :(得分:1)

您当前的数组就像

array(0 => 'Monkeyface', 1 => 43, /* ... */);

但你需要

array('Monkeyface' => 43, /* ... */);

替换

array_push($mostPopularJson, $mostPopularItem["views"], $mostPopularItem["thing"])

通过

$mostPopularJson[$mostPopularItem["thing"]] = $mostPopularItem["views"];

echo '{data:';
echo json_encode($mostPopularJson)
echo '}';

最好使用:

echo json_encode(array('data' => $mostPopularJson));

正如kingkero所说,你永远不会得到预期的结果,因为它是无效的:

{data:["Monkeyface":"43" ...

正确:

{ "data": { "Monkeyface": "43" ...