Инициализировать счетчик перед первым циклом - PullRequest
0 голосов
/ 28 сентября 2011

Эта строка

$.each(data[0].hotel_id, function (index, value) {

Прокручивает массив hotel_id, выполняя внутренний код JS для каждой записи в индексе настроек словаря для ключа в словаре и значения для содержимого.

Мой словарь:

"hotel_id": [{
    "hotel_id": ["1"]
}, {
    "hotel_id": ["2"]
}, {
    "hotel_id": ["3"]
}, {
    "hotel_id": ["4"]
}],

Имеет все элементы с одинаковым индексом, поэтому значение индекса всегда будет 'hotel_id', что бесполезно для i, когда я пытаюсь использовать его для поиска соответствующих дополнительных данных из других моих словарей.

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

См. Полный код JS: http://pastebin.com/jBWEDZrN

Это сводка из моего js-кода в вызове ajax (url: 'get_gr',):

$.each(data[0].hotel_id, function (index, value) {
    var $li = $('<li><input name="hotel_id[]" value="' + value.hotel_id + '" style="display:none;"></li>');
    var $tooltip = $('<div class="tooltip"></div>').appendTo($li);
    $li.appendTo('#residence_name');

    var info_ru = data[0].residence_u[index];
    $.each(info_ru.units, function (index, value) {
        $tooltip.append(value + ' & ' + info_ru.extra[index] + ' & ' + info_ru.price[index] + '<br>');
    });

    var info_rp = data[0].residence_p[index];
    $.each(info_rp.start_date, function (index, value) {
        $tooltip.append(value + ' & ' + info_rp.end_date[index] + ' & ' + info_rp.price_change[index] + '<br>');
    });
    tool_tip()
});

Это выходной php код (url: 'get_gr',):

[{
    "guide": null,
    "hotel_id": [{
        "hotel_id": ["1"]
    }, {
        "hotel_id": ["2"]
    }, {
        "hotel_id": ["3"]
    }, {
        "hotel_id": ["4"]
    }],
    "residence_u": [{
        "units": ["hello", "how", "what"],
        "extra": ["11", "22", "33"],
        "price": ["1,111,111", "2,222,222", "3,333,333"]
    }, {
        "units": ["fine"],
        "extra": ["44"],
        "price": ["4,444,444"]
    }, {
        "units": ["thanks", "good"],
        "extra": ["55", "66"],
        "price": ["5,555,555", "6,666,666"]
    }],
    "residence_p": [{
        "start_date": ["1111", "2222"],
        "end_date": ["1111", "2222"],
        "price_change": ["1111", "2222"]
    }, {
        "start_date": ["3333", "444"],
        "end_date": ["3333", "4444"],
        "price_change": ["3333", "4444"]
    }, {
        "start_date": ["5555", "6666"],
        "end_date": ["5555", "6666"],
        "price_change": ["5555", "6666"]
    }]
}]

Что мне делать?

Обновление: (это обновление для вышеуказанного php)

Я вставляю несколько (array) значений с json_encode в одну строку из таблицы базы данных, теперь хочу, чтобы они отображались как порядок с jquery.

Выходной код js:

1
hello & 11 & 1,111,111
how & 22 & 2,222,222
what & 33 & 3,333,333,
1111 & 1111 & 1111
2222 & 2222 & 2222

2
fine & 44 & 4,444,444
3333 & 3333 & 3333
4444 & 4444 & 4444

3
thanks & 55 & 5,555,555
good & 66 & 6,666,666
5555 & 5555 & 5555
6666 & 6666 & 6666

4

Ответы [ 2 ]

1 голос
/ 28 сентября 2011

Нет, в вашем массиве нет элементов с одинаковым индексом. У него есть элементы с разными индексами, но значение - это объект, который содержит свойство с одинаковым именем для каждого объекта. Индекс изменится с 0 до 3, если в массиве четыре элемента, как в примере.

Вы можете использовать value.hotel_id в цикле, чтобы получить массив, который является значением свойства, например ["1"].

Если массив в свойстве содержит только один идентификатор, вы можете просто использовать value.hotel_id[0], чтобы получить этот идентификатор.

Пример:

$.each(data[0].hotel_id, function (index, value) {
  alert(value.hotel_id[0]);
});

http://jsfiddle.net/Guffa/BWLqw/

0 голосов
/ 28 сентября 2011

Не вижу смысла в использовании each и анонимной функции.

Я бы просто использовал цикл for.

for(var n = 0; n < data[0].hotel_id.length; n++) {
  // put your function code here or call a named func(data[0].hotel_id[n])
}

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

...