2010-12-03 18 views
2

Ich versuche, ein Javascript-Array dynamisch zu erstellen, wobei _Tags ein global definiertes Array ist und dann über AJAX-Anfrage an PHP sendet. Grundsätzlich brauche ich die UID als Schlüssel und x, y als Sub-Array. in PHP würde es so etwas wieWie erstelle ich dynamisch ein mehrdimensionales Javascript-Array

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

aber im Ärger mit einem Array wie dies in Javascript, herauszufinden, heren, was ich habe

function add_tag_queue(uid,x,y){ 

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

    _tags.push(arr); 
} 

Antwort

4

Diese ok so lange funktioniert, wie sie nur Ein Eintrag wird zum Array hinzugefügt, Ich füge mehrere Werte, in anderen Worte die Funktion wird ein paar mal laufen und dann möchte ich senden gesamte Array, aber dies scheint nur hinzufügen alles mit einem Komma Delimeter.

Ich bin nicht sicher, was Sie genau hier sagen. Das zweite Beispiel, das ich zuvor gegeben habe, nimmt an, dass es für jedes uid ein einzelnes x, y-Paar gibt, setzt aber keine Grenzen dafür, wie viele uid s in _tags sind. Deshalb ist var _tags = {}; auf unserer Seite der Funktion - so ist es eine globale Variable.

die folgenden Änderungen würden können Sie mehrere x, y-Paare für jede uid haben:

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}); 
    } 
} 

Dies sollte funktionieren:

function add_tag_queue(uid,x,y){ 

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

, wenn Sie die uid als Schlüssel wollen Dann müssen Sie ein Objekt/Hash nicht array

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

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

Das funktioniert gut, solange nur ein Eintrag zum Array hinzugefügt wird. Ich füge mehrere Werte hinzu, dh die Funktion wird ein paar Mal ausgeführt und dann möchte ich das gesamte Array senden. aber das scheint nur alles mit einem Kommadealimeter hinzuzufügen. – Brian

+0

Die zweite Methode, die ich denke, ist, was ich will, aber haben Sie eine Idee, wie Sie das in ein Array in PHP konvertieren? – Brian

+0

'json_decode' dekodiert eine JSON-Zeichenfolge in ein PHP-Array. http://php.net/manual/en/function.json-decode.php – prodigitalson

0

Sie könnten es immer nur in PHP und JSON escodieren.

0

Sie möchten ein assoziatives Array in Javascript implementieren. Während Javascript assoziative Arrays nicht unterstützt, können Javascript-Objekte ähnlich behandelt werden.

Versuchen Sie stattdessen:

_tags = {} 

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

_tags ist jetzt ein Objekt, und Sie werden ein neues Objekt an dem uid Schlüssel hinzufügen. Ebenso wird das x, y-Paar in einem Objekt gespeichert. Das erste x ist der Schlüssel und das zweite ist der Wert. Um zu klären, könnte man es so schreiben:

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

Es sieht sehr ähnlich wie das PHP-Beispiel Sie haben:

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

Dies ist, wie ich mehrdimensionale Arrays in JS erstellen. Ich hoffe das hilft.

Verwandte Themen