2012-03-08 5 views
0

JavaScriptで配列をチェックする前に、PHPで配列を正しく構築する方法について、私自身が混乱しています。PHPでの配列とJavaScriptシンタックスの問題

私は

そのグリッド参照(x、y)を持つオブジェクトの配列を格納しようとしているので、私はPHPでこれを行う:

JavaScriptで
$get = mysql_query("SELECT x,y,sid FROM $table WHERE uid='1'") or die(mysql_error()); 
    while($row = mysql_fetch_assoc($get)) { 
     $data[$row['x'].$row['y']] = $row['sid']; 
    } 
//print_r($data); 
$data = json_encode($data); 

私はその後かどうかをチェックしてみてくださいオブジェクトは与えられた座標上に存在するので、私はこれを試してみます:

for (i=0;i<tilesw;i++){ //horizontal 
    for (j=0;j<tilesh;j++){ // vertical 

     if(sdata[i.j]){ 
      alert(sdata[i.j][sid]); 
     } 
      } 
     } 

sdataはjsonエンコード後の配列です。

私のJSONエンコードは次のようになります。 キャッチされないでSyntaxError:予期しないトークン]を警戒ラインに

{"44":"0","21":"0"} 

問題は、私が取得することです。

また、私のアプローチは正しいですか、または私の配列を構築するためのよりよい方法がありますか?

+2

?これは無効なjavascript構文です。 –

+0

iとjはforループで作成された2つの変数なので、次の場合にチェックします。 sdata [10]がtrueです。sdata [10]の値をエコーし​​ます。これは、私が1でjが0の場合の例です。 – Sir

+0

ああ、PHPの文字列連結構文を使用しています。 javascriptでは、 'sdata [i.toString()+ j.toString()]'(またはいくつかの妥当なファクシミリ)をしたいでしょう。 –

答えて

1

コードにJavaScriptの構文エラーがあります。 alert()行に余分な]があります。

alert(sdata[i.j][sid]]); 

あなたが実際にあなたも.ではなく+を使用する必要がjiを連結しようとしている場合は、キーとしてi.toString()+j.toString()を使用するのではなくなりので、

alert(sdata[i.j][sid]); 

である必要がありますi.j

二次元配列でこれを使用しての例:達成しようとするi.j` `は何

PHP

$arr = array(); 
while($row = mysql_fetch_assoc($get)) { 
    if(!isset($arr[$row['x']])) $arr[$row['x']] = array(); 
    $arr[$row['x']][$row['y']] = $row['sid']; 
} 

$data = json_encode($arr); 

はJavaScript

for(var x in sdata) { 
    for(var y in sdata[x]) { 
     alert('Object found at coordinates ' + x + ',' + y + ' ' + sdata[x][y]); 
    } 
} 
+0

ああ私はその間違いを修正しました:)ありがとう - 私は一度私とjが配列を満たすとまだ警告していないようですが/ – Sir

+0

@Dave私は自分の答えを更新しました。 – jprofitt

+0

私はそれを編集しましたが、警告は発生しません。/ json encodeはi4とj4に1つありますが、アラートを作成していないようです。/ – Sir