从序列化数据中解析PHP数组

时间:2010-09-13 22:33:05

标签: php jquery arrays nested jquery-ui-sortable

我正在使用http://mjsarfatti.com/sandbox/nestedSortable/中的jQuery插件 它在轻松排序列表方面做得非常出色,但我在保存数据库并将其重新加载时遇到问题。

我的问题是,一旦你将数组导入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 个答案:

答案 0 :(得分:2)

这应该可以帮助你:

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