PHP数据库结果>;阵列>;JSON(没有弃用的mysql\u fetch\u assoc)

PHP数据库结果>;阵列>;JSON(没有弃用的mysql\u fetch\u assoc),php,json,Php,Json,我一直在到处寻找一个明确的答案,这似乎是一个非常简单的任务-不幸的是,我能找到的所有解决方案(有很多)都使用mysql\u fetch\u assoc,这是不推荐的 我所要做的就是从数据库中获取一组两列的结果,并以JSON格式进行回显-除了一位之外,我已经处理得很好-我无法使用array_push将值获取到二维数组(两列数组)中。我的两个列值合并到一个数组中。以下是我所做工作的精简版本: header('Content-Type: application/json'); $mostPopular

我一直在到处寻找一个明确的答案,这似乎是一个非常简单的任务-不幸的是,我能找到的所有解决方案(有很多)都使用mysql\u fetch\u 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对每个循环上的字符串进行格式化,但这似乎效率低下


任何指点都将不胜感激

像这样组合数组:

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

您当前的数组如下所示

array(0 => 'Monkeyface', 1 => 43, /* ... */);
但你需要像

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

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

更好地使用:

echo json_encode(array('data' => $mostPopularJson));
正如kingkero所说,你永远不会得到你的预期结果,因为它是无效的:

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

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

您想要的JSON无效。数组是一个有序的值列表,而不是键值对,这是一个对象。另外,
数据
需要引用。感谢您的输入。我理解“数据”需要引号——只是我看到的一些FLOT示例忽略了它们。在第二个JSON示例中,您没有使用方括号,但JSON_encode正在创建方括号(不是我)-我是否遗漏了什么?方括号表示数组
['test',123]
,JSON数组从来没有键,索引只是元素的位置。
{
括号表示对象(或php关联数组):
{'test':123}
json\u encode
创建
[
,因为您的数组与您想象的不同:-)
{data:["Monkeyface":"43" ...
{ "data": { "Monkeyface": "43" ...