从数组创建导航

时间:2014-01-06 19:00:13

标签: php arrays navigation

我必须从PERL脚本生成的文件创建导航系统。 此脚本解析目录树并生成一个文件,其中每一行代表一个目录级别。

我无法访问此PERL脚本。 它生成类似这个模型的东西。

产品/ Manufacturer1 /产品1 产品/ Manufacturer1 /产品1 /说明 产品/ Manufacturer1 /产品2 产品/ Manufacturer1 /产品2 /说明 产品/ Manufacturer2 /产品1 / 产品/ Manufacturer2 /产品1 /说明

我构建了一个脚本,用于创建一个数组,如下所示

$array = array(
    array(
        'Products',
        'Manufacturer1',
        'Product1'
    ),
    array(
        'Products',
        'Manufacturer1',
        'Product1',
        'Description'
    ),
    array(
        'Products',
        'Manufacturer1',
        'Product2'
    ),
    array(
        'Products',
        'Manufacturer1',
        'Product2',
        'Description'
    ),
    array(
        'Products',
        'Manufacturer2',
        'Product1'
    ),
    array(
        'Products',
        'Manufacturer2',
        'Product1'
        'Description'
    ),
)

哪个应创建这样的HTML:

<ul>
    <li>Products
        <ul>
            <li>Manufacturer1
                <ul>
                    <li>Product1
                        <ul>
                            <li>Description</li>
                        </ul>
                    </li>
                    <li>Product2
                        <ul>
                            <li>Description</li>
                        </ul>
                    </li>
                </ul>
            </li>
            <li>Manufacturer2
                <ul>
                    <li>Product1
                        <ul>
                            <li>Description</li>
                        </ul>
                    </li>
                    <li>Product2
                        <ul>
                            <li>Description</li>
                        </ul>
                    </li>
                </ul>
            </li>
        </ul>
    </li>
</ul>

我无法弄清楚如何解决它。

1 个答案:

答案 0 :(得分:0)

这是一个讨厌的阵列结构来处理;理想情况下,您可以轻松识别产品,制造商等。假设值的位置保持不变,您可以执行以下操作:

$products = array();
foreach ( $array as $v ) {
    if ( isset($v[1]) && isset($v[2]) ) {
        $products[$v[1]][$v[2]] = isset($v[3]) ? $v[3] : '';
    }
}

但是你这样做,你会想把它变成一个多维数组,这样那个HTML就变得像以下一样简单:

<ul>
    <li>Products
    <ul>
        <?php
        foreach ( $products as $k => $v ) {
            ?>
            <li><?php echo $k ?>
                <ul>
                <?php
                foreach ( $v as $k2 => $v2 ) {
                    ?>
                    <li><?php echo $k2 ?>
                        <ul>
                            <li><?php echo $v2 ?></li>
                        </ul>
                    <?php
                }
                ?>
                </ul>
            </li>
            <?php
        }
        ?>
        </ul>
    </li>
</ul>