2

まず、これは重複した質問ではありません。私はいくつかの同様の問題を調べましたが、答えのほとんどは私が現在使用しているものです。

これがPHP側で設定された問題です

$array = array('name' => 'a', 'data' => array('0'=>15,'0.25'=>'18','0.35'=>19,'1' =>20));
echo json_encode($array);

JS側

data = $ .parseJSON(data); //データは上記のphpスクリプトからの戻り値です

ご覧のとおり、$ array ['data']は、数値をキーとして、順番に並べ替えられた連想配列です。JSONに解析している間、javascriptはその配列の順序を変更し、0と1を数字キーとして並べ替えて、オブジェクトの先頭に配置しました。

これは、ChromeやIE9などの特定のブラウザの標準的な動作であることを私は知っています。配列の順序を維持したい場合は、配列に厳密に固執することを人々が提案していることをどこかで読んだことがあります。しかし、私の質問は、jsonオブジェクトを使用する代わりに、どのようにして配列をPHPからjavascriptに配列としてフィードバックするのですか?または、この種の問題に対する他の解決策はありますか?よろしくお願いします。

事前にご入力いただきありがとうございます

4

3 に答える 3

3

配列を使用して順序を維持し、次にオブジェクトを使用してマップを作成します。2つの方法があります。私は提案します:

$array = array('name' => 'a', 'data' => 
  array(
    array('key' => 0, 'value' => 15),
    array('key' => 0.25, 'value' => 18),
    array('key' => 0.35, 'value' => 19),
    array('key' => 1, 'value' => 20),
  )
);
echo json_encode($array);

これでJSONが得られます。

{
    "name": "a",
    "data": [
       {"key": 0, "value": 15},
       {"key": 0.25, "value": 18},
       {"key": 0.35, "value": 19},
       {"key": 1, "value": 20}
    ]
}

次に、注文がありますが、特定のキーを検索するのはより困難になります。これを簡単にしたい場合は、次のようにマッピングオブジェクトを返すこともできます。

$array = array('name' => 'a', 'data' => 
  array(
    "0" => 15,
    "0.25" => 18,
    "0.35" => 19,
    "1" => 20,
  ),
  'order' => array("0", "0.25", "0.35", "1")
);
echo json_encode($array);

それはあなたに与えるでしょう:

{
    "name": "a",
    "data": {
       "0": 15,
       "0.25": 18,
       "0.35": 19,
       "1": 20
    },
    "order": ["0", "0.25", "0.35", "1"]
}

データを返すこれらの2つの方法のいずれかが、特定のユースケースに最も役立つことがわかります。

于 2012-06-05T23:39:09.423 に答える
0

実際、キーとキーを取得して数値キーにするのはPHP"0"です"1"。これはJavaScriptとは何の関係もありません。

これを回避する実際の方法はありませんが、理想的には、コードは「オブジェクトのキーの順序」などに依存しないようにする必要があります。ここに表示されている内容から、データをキーの配列と値の配列に分割してから、JS側でそれらを一緒に圧縮する方がよい場合があります。

于 2012-06-05T23:39:34.733 に答える
0

注文を保存するための別のフィールドを提案します。

$array = array('name' => 'a',
               'data' => array('0'=>15,'0.25'=>'18','0.35'=>19,'1' =>20),
               'order'=> '0,0.25,0.35,1'
          );
echo json_encode($array);
于 2012-06-05T23:40:10.730 に答える