Разбор PHP Array из сериализованных данных - PullRequest
2 голосов
/ 14 сентября 2010

Я использую плагин jQuery из http://mjsarfatti.com/sandbox/nestedSortable/ Он отлично справляется с простой сортировкой списка, но у меня возникают проблемы с сохранением его в БД и его загрузкой.

МойВопрос в том, как только вы получите массив в PHP, сериализуете его и сохраните в базе данных, вы получите что-то вроде

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";}}

Извлечение его из базы данных, десериализовать его и сделать у меня var_export

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

Как мне тогда пройти через этот массив и убедиться, что каждый дочерний элемент правильно вложен?Вывод должен быть в неупорядоченном списке, например

page_1
page_3
 - page_2
Page_4

Или в реальном коде

<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>

Но после завершения он будет огромным и, возможно, глубиной 4-5 уровней.

Заранее спасибо!

1 Ответ

2 голосов
/ 14 сентября 2010

Это должно помочь вам:

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']);
...