PHP文件不返回完整的json数据

时间:2012-10-29 11:45:30

标签: php json

我正在创建一个将json数据返回到javascript文件的php文件。目前它只返回最后一个json对象并忽略其余的json对象。这是我的PHP代码

$arr = array(
  "cartId" => 456186,
  "lastModified" => "Tue, 19 Jan 2010 03:14:07 GMT",
  "items" => array(
    15642,
    45616,
    54984,
    45751
  ),
  "cartId" => 456187,
  "lastModified" => "Tue, 20 Jan 2010 04:14:07 GMT",
  "items" => array(
    'item' => 15643,
    'item' => 45617,
    'item' => 54985,
    'item' => 45752
  )
);
echo json_encode($arr);

以上代码返回

{"cartId":456187,"lastModified":"Tue, 20 Jan 2010 04:14:07 GMT","items":{"item":45752}}

如何解决此问题?

5 个答案:

答案 0 :(得分:8)

这应该有效:

$arr = array(
  array(
    "cartId" => 456186,
    "lastModified" => "Tue, 19 Jan 2010 03:14:07 GMT",
    "items" => array(
      15642,
      45616,
      54984,
      45751
    )
  ),
  array(
    "cartId" => 456187,
    "lastModified" => "Tue, 20 Jan 2010 04:14:07 GMT",
    "items" => array(
      15643,
      45617,
      54985,
      45752
    )
  )
);
echo json_encode($arr);

您的错误的原因是因为您不能在PHP数组(或JSON对象)中有重复的键。后面的键覆盖了前者,并创建了一个较小版本的数组。

在这里,我们将项目分组为子数组。

答案 1 :(得分:3)

第一个元素被第二个元素覆盖,因为它们的键是相同的。与第二项中的items数组相同。

尝试

$arr = array (
  array(
    "cartId"       => 456186,
    "lastModified" => "Tue, 19 Jan 2010 03:14:07 GMT",
    "items"        => array(
      15642,
      45616,
      54984,
      45751, 
    ),
  ),
  array(
    "cartId"       => 456187,
    "lastModified" => "Tue, 20 Jan 2010 04:14:07 GMT",
    "items"        => array(
      15643,
      45617,
      54985,
      45752, 
    ),
  ), 
);

答案 2 :(得分:0)

你不能给出相同的索引

$arr = array(
      "cartId1" => 456186,
      "lastModified1" => "Tue, 19 Jan 2010 03:14:07 GMT",
      "items1" => array(
        15642,
        45616,
        54984,
        45751
      ),
      "cartId2" => 456187,
      "lastModified2" => "Tue, 20 Jan 2010 04:14:07 GMT",
      "items2" => array(
        'items1' => 15643,
        'items2' => 45617,
        'items3' => 54985,
        'items4' => 45752
      )
    );
    echo json_encode($arr);

答案 3 :(得分:0)

以下是您基本需要做的事情:

$arr = array(
        array(
            "cartId" => 456186,
            "lastModified" => "Tue, 19 Jan 2010 03:14:07 GMT",
            "items" => array(
                15642,
                45616,
                54984,
                45751
            ),
        ),
        array(
           "cartId" => 456187,
            "lastModified" => "Tue, 20 Jan 2010 04:14:07 GMT",
            "items" => array(
                'item' => 15643,
                'item' => 45617,
                'item' => 54985,
                'item' => 45752
            ) 
        )
    );

因此,您可以看到我们必须将嵌套元素的集合包装在数组的内部。

答案 4 :(得分:0)

您没有正确设置多维数组。

为此,您需要使用array()来设置嵌套/内部数组。

$arr = array(array("key"=>"value"), array("key"=>"value"));

而不是你现在正在做的事情:

$arr = array(("key"=>"value"), ("key"=>"value"));