Перебор двухмерного массива
Здравствуйте!
Есть задача: при помощи ajax получать записи из бд Mysql. Сайт работает на codeigniter.
$('#TestPrivet1').click(function(){
var param = $('#pole1').val();
$.ajax({
type: 'POST',
url: 'http://masterstvo-zhizni.loc/index.php/seminars/showAjax',
data: {'param':param},
cache: false,
dataType: 'json',
success: function(data) {
$('#result1').html('<table class="raspisanie_sem"><tr class="one"><td>Дата проведения</td><td>Город</td><td>Организатор</td><td>Тема</td></table>');
for ( var key1 in data['dataAjax'] ) {
for ( var key2 in data['dataAjax'][key1] ) {
$('#result1').append('<tr class="tbody"><td>' + data['dataAjax'][key1]['date']+ '</td><td>'+ data['dataAjax'][key1]['gorod']+'</td><td class="cursiv">'+ data['dataAjax'][key1]['fio']+ data['dataAjax'][key1]['telefon']+data['dataAjax'][key1]['email']+'</td><td class="bold_td">'+data['dataAjax'][key1]['zagolovok']+'</td></tr>');
}
}
}
});//конец ajax
});//конец клик
});//конец ready
Контроллер:
public function showAjax(){
$param = $this->input->post('param');
$data = array();
$data['dataAjax'] = $this->raspisanie_model->get_one($param);
// Возвращаем ответ
echo json_encode($data);
}
Запрос к базе:
public function get_one($seminar_id) {
$this->db->select(' raspisanie.date
, organizator.gorod
, organizator.fio
, organizator.email
, organizator.telefon
, seminars.zagolovok');
$this->db->from('raspisanie');
$this->db->join('seminars', 'raspisanie.seminar_id = seminars.seminar_id');
$this->db->join('organizator', 'raspisanie.organizator_id = organizator.organizator_id');
$this->db->where('raspisanie.seminar_id',$seminar_id);
$query = $this->db->get();
return $query->result_array();
}
Проблема в следующем: данные вставляются, но почему то приходит три строки. А при переборе массива каждая строка выводится на сайте по 6 раз.т.е. вместо 3-х нужных, получаю 18 строк в таблице на сайте. firebug: dataAjax [Object { date="7-8-9 декабря 2012г.", gorod="Рязань", fio="Елена ", ещё...}, Object { date="14-15-16 декабря", gorod="Воронеж", fio="Фарида и Александр" , ещё...}, Object { date="2-3 февраля", gorod="Одесса", fio="Татьяна " , ещё...}] 0 Object { date="7-8-9 декабря 2012г.", gorod="Рязань", fio="Елена " , ещё...} 1 Object { date="14-15-16 декабря", gorod="Воронеж", fio="Фарида и Александр", ещё...} 2 Object { date="2-3 февраля", gorod="Одесса", fio="Татьяна " , ещё...} |
у тебя явно косяк внутри двух циклов где формируется HTML полученных данных, думаю ряды <tr> нужно формировать в первом цикле ( вне второго короче) а уже столбцы <td> добавлять внутри второго цикла,
в общем у тебя логическая ошибка тут что-то вроде того
success: function(data) {
$('#result1').html('<table class="raspisanie_sem"><tr class="one"><td>Дата проведения</td><td>Город</td><td>Организатор</td><td>Тема</td></table>');
var html=''
for ( var key1 in data['dataAjax'] ) {
html+='<tr class="tbody">'
for ( var key2 in data['dataAjax'][key1] ) {
html+='<td>'+data['dataAjax'][key1][key2]+'</td>'
}
html+='</tr>'
}
$('#result1').append(html)
}
// отпишись как помозгуешь
|
Спасибо тебе огромное! щас выводит правильно. Только три строки. Но, в разных ячейках
|
Есть ещё вопрос:
Щас он выводит каждый элемент в отдельную ячейку, т.е получается 6-ть ячеек, а в шапке 4-ре А мне нужно: первый элемент: data['dataAjax'][key1]['date'] в отдельной ячейке второй элемент: data['dataAjax'][key1]['gorod'] в отдельной ячейке третий и четвертый и пятый вывести в одной ячейке: data['dataAjax'][key1]['fio']; data['dataAjax'][key1]['telefon']; data['dataAjax'][key1]['email'] шестой data['dataAjax'][key1]['zagolovok'] в отдельной ячейке
function(data) {
$('#result1').html('<table class="raspisanie_sem"><tr class="one"><td>Дата проведения</td><td>Город</td><td>Организатор</td><td>Тема</td></table>');
var html=''
for ( var key1 in data['dataAjax'] ) {
html+='<tr class="tbody">'
for ( var key2 in data['dataAjax'][key1] ) {
html+='<td>'+data['dataAjax'][key1]['date']+'</td>'+'<td>'+data['dataAjax'][key1]['gorod']+'</td>'+'<td>'+data['dataAjax'][key1]['fio']+data['dataAjax'][key1]['telefon']+data['dataAjax'][key1]['email']+'</td>'+'<td>'+data['dataAjax'][key1]['zagolovok']+'</td>';
}
html+='</tr>'
}
$('#result1').append(html)
}
Щас выводит три строки, но теперь повторяет столбцы. Т.е первый проход цикла 4-ре столбца , потом опять 4-ре столбца и т.д. |
success: function(data) {
$('#result1').html('<table class="raspisanie_sem"><tr class="one"><td>Дата проведения</td><td>Город</td><td>Организатор</td><td>Тема</td></table>');
var html='',count
for ( var key1 in data['dataAjax'] ) { count=0
html+='<tr class="tbody">'
for (var key2 in data['dataAjax'][key1] ) {count++
if (count<4||count==6){html+='<td>'}
html+=data['dataAjax'][key1][key2]
if (count<3||count>4){html+='</td>'}
}
html+='</tr>'
}
$('#result1').append(html)
}
// что-то вроде того проверь там
|
Изящно, Зачёт! Сработало. Вывел три строки в каждой по 4-ре ячейки
|
Здравствуйте! Понимаю, что теме уже >4 лет, но столкнулась с абсолютно идентичной проблемой, так что даже зарегистрировалась на форуме и вышла из режима readonly :D
success: function (data)
{
list = JSON.parse(data);
var html = "";
for (var key1 in list['list'])
{
html+='<a class = "link" onclick="event.preventDefault()">';
for (var key2 in list['list'][key1]) {
//i++;
// console.log(i);
html +='<li class = "big" onclick="findList(' + (+key1 + 1) + ')">' + list['list'][key1]["ima"] + " \(" + list['list'][key1]["count(marker.district)"] + "\)</li>";
//console.log(list['list'][key1]["ima"]);
}
html+='</a>';
};
html+='<a class = "link" onclick="event.preventDefault()"><li class = "big" onclick="findList('+list.allLIST['count(*)']+")>Все районы" + " \(" + list.allLIST['count(*)'] + "\)</li></a>";
console.log(html);
$("ul.list").html(html);
}
Прочитав ответ от bushstas, выполнила его совет. В итоге все равно выводит по три строки в один <li>. А list.allLIST['count(*)'] вообще выдает undefined. Помогите пожалуйста, кто сможет. Уже три дня бьюсь головой о клаву... Заранее спасибо! |
Цитата:
|
Цитата:
Запросы к базе и тд. не предоставила, потому как объект (массив) практически идентичен с объектом автора темы. |
Navka1, начнем с того, что в тег <a> не стоит "вставлять" теги <li>...
Для анализа циклов бывает достаточно просто выводить то, с чем имеешь дело в самом цикле. Обычно это многое проясняет... ;) |
| Часовой пояс GMT +3, время: 12:30. |