0

jsonデータをjavascriptファイルに返すphpファイルを作成しています。現在、最後の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

キーが同じであるため、最初の要素は2番目の要素で上書きされています。items2番目の項目の配列と同じです。

試す

$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

基本的に行う必要があることは次のとおりです。

$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 に答える
0

多次元配列を適切に設定していません。

array()これを行うには、ネストされた/内部配列を設定するために使用する必要があります。

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

あなたが現在していることではなく:

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

于 2012-10-29T13:51:50.190 に答える