2010-12-03 6 views
2

私は_tagsがグローバルに定義された配列であるjavascript配列を動的に構築しようとしていて、それをajaxリクエストでphpに送ります。基本的には、私はキーとしてuidが必要で、サブ配列としてx、yが必要です。 PHPでそれがどうやって動的に多次元のjavascript配列を作成するのですか?

$arr[$uid] = array('x'=>$x,'y'=>$y); 

が、イムは、JavaScriptで次のように配列を考え出す問題が発生したようになり、HERESに私は 自分であるとして、これは限りうまく動作

function add_tag_queue(uid,x,y){ 

    var arr = new Array(3); 
    arr[0] = uid; 
    arr[1] = x; 
    arr[2] = y; 

    _tags.push(arr); 
} 

答えて

4

持っているもの1つのエントリが配列に追加されています 複数の値を追加していますが、他の ワードでは関数がいくつか実行されます。 回、次にそれを の配列全体に送信したいのですが、これはちょうど すべてをカンマで区切記号 に追加してください。

ここで正確に何を言っているのかわかりません。前に与えた第2の例は、それぞれuidに対して1つのx、yペアがあると仮定しますが、uidの数が_tagsである数に制限はありません。それはなぜvar _tags = {};が関数の - 私たちのグローバル変数です。

以下の修正では、各uidのために複数のx、yのペアを持つことができるようになる:

function add_tag_queue(uid,x,y){ 

    /* 
    * detect if _tags[uid] already exists with one or more values 
    * we assume if its not undefined then the value is an array... 
    * this is similar to doing isset($_tags[$uid]) in php 
    */ 
    if(typeof _tags[uid] == 'undefined'){ 
    /* 
     * use an array literal by enclosing the value in [], 
     * this makes _tags[uid] and array with eah element of 
     * that array being a hash with an x and y value 
     */ 
    _tags[uid] = [{'x':x,'y':y}]; 
    } else { 
    // if _tags[uid] is already defined push the new x,y onto it 
    _tags[uid].push({'x':x, 'y':y}); 
    } 
} 

これは動作するはずです:

function add_tag_queue(uid,x,y){ 

    _tags.push([uid, x,y]); 
} 

キーとしてuidをしたい場合そうでないオブジェクト/ハッシュを使用する必要がありますarray

var _tags = {}; // tags is an object 
function add_tag_queue(uid,x,y){ 

     _tags[uid] = {'x':x,'y':y}; 
    } 
+0

これは、限り、アレイに追加されたエントリが1つしか自分であるとして、私は複数の値を追加している、つまり関数が数回実行され、その後、私はその配列全体を送信したい[OK]を動作しますこれはカンマ区切りですべてを追加しているようです。 – Brian

+0

私が思う第2の方法は、私が望むものですが、PHPで配列に変換する方法はありますか? – Brian

+0

'json_decode'はjson文字列をphp配列にデコードします。 http://php.net/manual/en/function.json-decode.php – prodigitalson

0

いつでもphpでビルドし、json_encodeでビルドできます。

0

Javascriptで連想配列を実装しようとしています。 Javascriptは連想配列をサポートしていませんが、Javascriptオブジェクトはほとんど同じように扱うことができます。

代わりにこれを試してみてください:

_tags = {} 

function add_tag_queue(uid,x,y){ 
    _tags[uid] = {x:x, y:y}; 
} 

_tagsは現在のオブジェクトであり、あなたは、uidのキーで新しいオブジェクトを追加することがあります。同様に、x、yペアはオブジェクトに格納されます。最初のxはキーで、2番目の値は値です。

function add_tag_queue(uid,xValue,yValue){ 
    _tags[uid] = {x:xValue, y:yValue}; 
} 
0

それはあなたが与えたPHPの例と非常によく似ています::明確にするために、あなたはこのようにそれを書くことができ

function add_tag_queue(uid,x,y){ 
    _tags[uid] = {x: x, y: y}; 
} 
0

これは、私はJSで多次元配列を作成する方法です。私はこれが役立つことを願っています

var arr= []; 
arr[uid] = new Array(); 
arr[uid]["x"] = xvalue; 
arr[uid]["y"] = yvalue; 
関連する問題