PHP JSON编码 - 手动分配密钥?

时间:2011-09-20 11:39:17

标签: php json

我试图在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?

任何建议表示赞赏。

感谢。

1 个答案:

答案 0 :(得分:3)

问题是Javascript(以及大多数其他语言)中的数组不能包含用户定义的键。您希望将数组编码为JSON 对象而不是数组(PHP中的数组与用户定义的键本质上是对象)。对于具有非数字键的数组,这通常会自动发生。

在您的情况下,您可以使用JSON_FORCE_OBJECT标志:

$output = '{"items":'.json_encode($items,JSON_FORCE_OBJECT).'}';

来自documentation

Non-associative array output as array: [[1,2,3]] 
Non-associative array output as object: {"0":{"0":1,"1":2,"2":3}}