Разбор многомерного массива json в JQuery - PullRequest
0 голосов
/ 26 января 2011

Я перетаскиваю массивы json в Jquery - нет проблем, просто как вы анализируете многомерный массив, где у вас могут быть дочерние массивы.

PHP для "создания" JSON, извлекающего из базы данных

   $STH = $DBH->query("SELECT FID FROM flist WHERE ParentID='0'" );
$STH->setFetchMode(PDO::FETCH_OBJ);
while( $row = $STH->fetch()) : 
 $farray[$row->FID]['FID']  = $row->FID;
  $RTH = $DBH->query("SELECT FID FROM flist WHERE ParentID= ".$row->FID." " );
  $RTH->setFetchMode(PDO::FETCH_OBJ);
  $fquerycount = $RTH->rowCount();
  if($fquerycount!=0): 
   while( $res = $RTH->fetch()) : 
    $farray[$row->FID]['FCHILD'][$res->FID] = $res->FID;
   endwhile;
  endif;
endwhile;

закодируйте его так:

echo  $jc . '(' . json_encode($forum)  . ')';

Примечание: $ jc является ответом jsoncallback.

Теперь, как вы «читаете» это здесь:

   $.getJSON("http://127.0.1/jtest3.php?start=0&jsoncallback=?", function(data){ 
$.each(data, function(i,item){         
$('#testit').append('<li'+item.FID+'<ul><li>'+item.FCHILD+'</li><ul></li>');
}); 
});

Мне кажется - хорошо, я уверен, что это должно понадобиться - еще один цикл .each () для дочернего массива? Код работает нормально для всех аспектов, кроме отображения дочернего элемента. Если я удалю ключ [$ res-> FID] из дочернего массива, то это нормально, но, очевидно, я получу только последнюю запись в БД. Проблема в том, что дочерний массив содержит более 1 записи. У вас будет 1 родитель (первый запрос, который выдает $farray[$row->FID]['FID'] = $row->FID;), а затем дочерний элемент второго запроса, т.е. $farray[$row->FID]['FCHILD'][$res->FID] = $res->FID; Теперь в этом массиве может быть 2, 10, 20 и т. Д. Как вы запускаете эту секунду каждый цикл? Помощь высоко ценится. Спасибо

1 Ответ

0 голосов
/ 26 января 2011

Проверьте эту ветку Написание многомерного массива jQuery и, если быть более точным, этот комментарий

"в javascript нет многомерных массивов, но вы можете иметь массив, элементы которого являются массивами"

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

...