为ul()代码编写器帮助器转换数组结构


Convert array structure for ul() codeigniter helper

我想问一下如何转换如下数组:

$arr = array(
    array(
        'id' => 1,
        'name' => 'Home',
        'link_to' => 'home.php',
        'parent' => 0,
        'level' => 1
    ),
    array(
        'id' => 2,
        'name' => 'About',
        'link_to' => 'about.php',
        'parent' => 0,
        'level' => 1
    ),
    array(
        'id' => 3,
        'name' => 'About Me',
        'link_to' => 'about-me.php',
        'parent' => 2,
        'level' => 2
    ),
    array(
        'id' => 4,
        'name' => 'About Us',
        'link_to' => 'about-us.php',
        'parent' => 2,
        'level' => 2
    ),
    array(
        'id' => 5,
        'name' => 'Contact Us',
        'link_to' => 'contact-us.php',
        'parent' => 4,
        'level' => 3
    ),
    array(
        'id' => 6,
        'name' => 'Blog',
        'link_to' => 'blog.php',
        'parent' => 0,
        'level' => 1
    ),
);

进入这个:

$result = array(
    'Home',
    'About' => array(
        'About Me',
        'About Us' => array(
            'Contact Us'
        )
    ),
    'Blog'
);

有元素'parent' id可以告诉父数组(0 = root),也有元素'level'。

我需要那种数组,所以我可以使用ul()函数从编码器助手创建列表。

我必须做一些类似的事情来从数据行创建一个树。

所以,你必须使用引用,这比其他方法更容易。

下一个代码到达类似于你想要的东西(我认为这是更好的结构,如果你以后做更改)

<?php
    $arr = array(
        array(
            'id' => 1,
            'name' => 'Home',
            'link_to' => 'home.php',
            'parent' => 0,
            'level' => 1
        ),
        array(
            'id' => 2,
            'name' => 'About',
            'link_to' => 'about.php',
            'parent' => 0,
            'level' => 1
        ),
        array(
            'id' => 3,
            'name' => 'About Me',
            'link_to' => 'about-me.php',
            'parent' => 2,
            'level' => 2
        ),
        array(
            'id' => 4,
            'name' => 'About Us',
            'link_to' => 'about-us.php',
            'parent' => 2,
            'level' => 2
        ),
        array(
            'id' => 5,
            'name' => 'Contact Us',
            'link_to' => 'contact-us.php',
            'parent' => 4,
            'level' => 3
        ),
        array(
            'id' => 6,
            'name' => 'Blog',
            'link_to' => 'blog.php',
            'parent' => 0,
            'level' => 1
        ),
    );

    $refs = array();
    foreach($arr as &$item) {
        $item['children'] = array();
        $refs[$item['id']] = $item;
    }
    unset($item); // To delete the reference
    // We define a ROOT that is the top of each elements
    $refs[0] = array(
        'id' => 0,
        'children' => array()
    );
    foreach($arr as $item) {
        if($item['id'] > 0) {
            $refs[$item['parent']]['children'][] = &$refs[$item['id']];
        }
    }
    $result = $refs[0];
    unset($refs); // To delete references
    var_dump($result);
?>