我试图在AJAX请求中将MySQL查询结果转换为JSON。 我的代码目前看起来像这样。
$offset = empty($_GET['offset']) ? 0 : $_GET['offset'];
$numimagestodisplay = 3;
$items = array();
$allitems // This is the queryset obtained through a call to a function
foreach ($allitems as $i => &$item)
{
if (($i >= $offset) && (count($items) < $numimagestodisplay))
{
$items[$i] = $item;
}
}
$output = '{"items":'.json_encode($items).'}';
然后我想在调用上面代码的javascript中循环返回结果,并且需要通过键来引用数组项(我需要使用这些值来更改一些HTML元素ID)。但是,JSON以错误的格式返回。
如果我改变了行
$items[$i] = $item;
为:
$items[] = $item;
然后我可以通过键来引用它,但键显然只是0,1,2,而我需要键是循环中定义的值。
如何更改PHP代码以正确的格式返回JSON?
任何建议表示赞赏。
感谢。
答案 0 :(得分:3)
问题是Javascript(以及大多数其他语言)中的数组不能包含用户定义的键。您希望将数组编码为JSON 对象而不是数组(PHP中的数组与用户定义的键本质上是对象)。对于具有非数字键的数组,这通常会自动发生。
在您的情况下,您可以使用JSON_FORCE_OBJECT
标志:
$output = '{"items":'.json_encode($items,JSON_FORCE_OBJECT).'}';
Non-associative array output as array: [[1,2,3]]
Non-associative array output as object: {"0":{"0":1,"1":2,"2":3}}