2010-12-03 2 views
2

Я пытаюсь динамически построить массив javascript, где _tags - глобально определенный массив, а затем отправить его на php через запрос ajax. В основном мне нужен uid как ключ, а x, y - как вспомогательный массив. В PHP это будет выглядеть какКак я могу динамически создать многомерный массив javascript

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

, но им не удается выяснить массив, как это в JavaScript, Вот что я имею

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

Это работает нормально, до тех пор, как их только одна запись добавляется в массив, Я добавляю несколько значений, в других словах слов функция будет запускать несколько раз, а затем я хочу отправить весь этот массив , но это похоже на добавлять все с запятой .

Я не уверен, что вы говорите именно здесь. Второй пример, который я ранее дал, предполагает наличие одной пары x, y для каждого uid, но не устанавливает ограничений на количество uid s в _tags. Вот почему var _tags = {}; является нашей функцией - так что это глобальная переменная.

Следующие модификации позволит вам иметь несколько пар х, у каждого uid:

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

Это работает нормально, пока их только одна запись добавляется в массив, я добавляю несколько значений, другими словами функция будет работать несколько раз, а затем я хочу отправить весь массив, но это, кажется, просто добавляет все с помощью запятой. – Brian

+0

Второй способ, который я думаю, это то, что я хочу, но знаете ли вы, как преобразовать его в массив в 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 - это ключ, а второй - значение. Для того, чтобы уточнить, можно написать так:

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; 
Смежные вопросы