0

我正在制作一个 php 文件,它将 json 数据返回到 javascript 文件。目前它只返回最后一个 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}}

我该如何解决这个问题?

4

5 回答 5

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 对象)中有重复的键。后来的键覆盖了前者,并创建了一个较小版本的数组。

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

于 2012-10-29T11:48:51.590 回答
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, 
    ),
  ), 
);
于 2012-10-29T11:48:16.630 回答
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);
于 2012-10-29T11:58:16.907 回答
0

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

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

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

而不是你目前正在做的事情:

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

于 2012-10-29T13:51:50.190 回答
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
            ) 
        )
    );

如您所见,我们必须将嵌套元素的集合包装在数组中。

于 2012-10-29T12:05:48.303 回答