2010-09-13 5 views
2

J'utilise le plugin jQuery de http://mjsarfatti.com/sandbox/nestedSortable/ Il fait un excellent travail pour trier facilement la liste, mais je rencontre des problèmes avec l'enregistrement d'une base de données et son chargement.Analyser le tableau PHP à partir des données sérialisées

Ma question est une fois que vous obtenez le tableau en PHP, sérialisation et de le stocker dans une base de données, vous vous retrouvez avec quelque chose le long des lignes de

a:1:{s:4:"page";a:4:{i:4;s:4:"root";i:2;s:1:"4";i:3;s:1:"2";i:1;s:1:"2";}}

tirant vers l'arrière de la base de données, désérialisable et faire un var_export je

array ('page' => array (1 => 'root', 3 => 'root', 2 => '3', 4 => 'root',),)

Comment puis-je puis à travers ce tableau et assurez-vous que chaque enfant est correctement emboîté? La sortie devrait être dans une liste non ordonnée comme

page_1 
page_3 
- page_2 
Page_4 

Ou dans votre code

<ul> 
    <li id="page_1">Page 1</li> 
    <li id="page_3">Page 3 
    <ul> 
     <li id="page_2>Page 2</li> 
    </ul> 
    </li> 
    <li id="page_4">Page 4</li> 
</ul> 

Mais une fois terminé, il sera énorme et peut-être 4-5 niveaux de profondeur.

Merci d'avance!

+0

S'il vous plaît g-d, ne me dites pas que vous stockez des données sérialisés dans une base de données. S'il vous plaît! –

+0

S'il y a une meilleure façon de stocker de grandes baies, alors n'hésitez pas à donner le conseil! :-) – LostInQuery

+1

Si vous ne faites que stocker et regater les données, un format sérialisé est généralement acceptable. Si vous avez besoin de travailler avec la structure et de la stocker efficacement, je recommande Set Trees: http://en.wikipedia.org/wiki/Nested_set_model – staticsan

Répondre

2

Cela devrait vous aider sur votre chemin:

function display_page_listings($arr, $parent = 'root') 
{ 
    if($parent == 'root') 
    { 
     echo '<ul>'; 
    } 
    $displayed = false; 
    foreach($arr as $item_index => $item_parent) 
    { 
     if($item_parent == $parent) 
     { 
      if(!$displayed && $parent != 'root') 
      { 
       echo '<ul>'; 
       $displayed = true; 
      } 
      echo '<li id="page_' . $item_index . '">Page ' . $item_index; 
      display_page_listings($arr, $item_index); 
      echo '</li>'; 
     } 
    } 
    if($parent == 'root' || $displayed) 
    { 
     echo '</ul>'; 
    } 
} 

$arr = array(
    'page' => array (1 => 'root', 3 => 'root', 2 => '3', 4 => 'root') 
); 

display_page_listings($arr['page']); 
+0

Avec quelques réglages pour correspondre à la sortie désirée, ce script a fait des merveilles! Merci!! – LostInQuery

Questions connexes