2017-10-30 10 views
1

配列を動的にjavascriptで塗りつぶし、それをjson文字列に変換して、それを処理するPHPに渡します。
問題:
私は-code 1-ような配列を定義すると期待どおりに出力される。配列を作成し、jsonに変換してPHPに渡します

var feld = { 
"key1" : "1", 
"key2" : "2", 
"key3" : "3" 
}; 
for (key in feld) { console.log (key + "= " + feld[key]); } 
var jsonString = JSON.stringify(feld); 
console.log(jsonString); 

OUTPUT:

KEY1 = 1
KEY2 = 2
KEY3 = 3
{"key1": "1"、 "key2": "2"、 "key3": "3"}

Iは-code 2-

var feld = new Array(); 
feld["key1"]="1"; 
feld["key2"]="2"; 
feld["key3"]="3"; 
for (key in feld) { console.log (key + "= " + feld[key]); } 
var jsonString = JSON.stringify(feld); 
console.log(jsonString); 

OUTPUT状アレイ定義する場合:

KEY1 = 1
KEY2 = 2
KEY3 = 3
[]

つまり、コード-2でPHPに渡すものはありません。
どうしたの?

+1

を「1 - -code」は、配列ではない、それは非配列オブジェクトです。 "-code 2"は配列ですが、配列以外のオブジェクトとして使用されています。 –

+1

'JSON.stringify'は配列の非数値プロパティ*を文字列化しません。 – gurvinder372

+1

https://stackoverflow.com/questions/4425289/javascript-associative-array-to-json – gurvinder372

答えて

2

"-code 1-"は配列ではなく、配列ではないオブジェクトです。 "-code 2"は配列ですが、配列以外のオブジェクトとして使用されています。 (なぜなら、配列であるため配列化されていないため配列以外のプロパティは表示されません)

何が問題なのですか? 配列がしたい、あなたは配列を作成する必要があります。

var feld = ["1", "2", "3"]; 

しかし、あなたは、配列を望んでいないように聞こえる、あなたが本当にあなたの最初の例のように、オブジェクトをしたいです。これをJSONに変換してサーバーに送信する場合は、を使用してPHPオブジェクトにデコードし、key1key2、およびkey3プロパティにアクセスして値を取得します。

-1

あなたの配列を客観化する必要があります。

... 
feld = Object.assign({}, feld); 

var jsonString = JSON.stringify(feld); 
... 
+0

あなたのお手伝いをしていただきありがとうございます
私は配列とオブジェクトの違いに気付きました。
したがって、var feld = {}で、feld [key1] = value1は完全に機能します。 –

0

あなたはPHPの配列とJSで配列を混乱されています。 PHPの場合、次のような配列のリテラルキーを定義することができます:

<?php 
    $a = array('key1' => 1); 
    $a['key1] === 1 

jsは、配列ではなくオブジェクトに相当します。あなたが好きなら

jsが、それは数値インデックスによって与えられた値/オブジェクトごとのリストだけで、配列をコンセプトに、

a = [2, 4, 6]; 

よりmathematichalです。

a[1] === 4 
0

JavaScriptでは、この配列のメンバーではない配列にプロパティを割り当てることができます。例えば:

let array = new Array(); // Creates empty array: [] 
array[0] = 123; // Inserts a member to array 
console.log(array) // Will output: [123] 

array["abc"] = 789 // Attaches a property to array 

console.log(array) // Will output: [123], no members were added to array 
console.log(array.abc) // Will output: 789 

配列もオブジェクトとして作用するので、これは可能であるので、それがメンバー(索引付け)ともプロパティを(キーを有する)を有します。

配列にはキー(key0、key2、key3、...)はなく、インデックス(0,1,2、...)のみがあります。マップまたは配列のいずれかが必要です。マップご質問(最初の部分)に接続されているコードによって作成され、配列は以下のように作成することができます。

var feld = new Array(); 
feld[0]="1"; 
feld[1]="2"; 
feld[2]="3"; 
var jsonString = JSON.stringify(feld); 
console.log(jsonString); 
関連する問題