Php字符串到多级列表HTML

时间:2016-01-14 17:21:17

标签: php string html-lists

我有档案

animals.txt

fishes   shark,tuna,salmon
birds    parrot,pigeon
mammals  cow,dog,cat

在每一行中,例如鱼类和鲨鱼之间都是制表。

我想得到这个输出:

<ul type="disc">
            <li>fishes<br>
                <ul type="disc">
                    <li>shark</li>
                    <li>tuna</li>
                    <li>salmon</li>
                </ul>
            </li>
            <li>birds<br>
                <ul type="disc">
                    <li>parrot</li>
                    <li>pigeon</li>
                </ul>
            </li>
            <li>mammals<br>
                <ul type="disc">
                    <li>cow</li>
                    <li>dog</li>
                    <li>cat</li>
                </ul>
            </li>
        </ul>

我编写了简单的代码,但我不知道接下来我能做什么,有人可以帮我解决吗?

的index.php     

$file = fopen('animals.txt', 'r');
while (!feof($file)) {
    $line = fgets($file);
    $a = explode(" ", $line);
    $b = str_replace(",", " ", $a);
    $c = explode(" ", $b);
    print_r($b);


}
fclose($file);
?>

2 个答案:

答案 0 :(得分:1)

如果您只是想阅读该文件而不是在其中写入,那么使用file可能比fopen更简单,因为它会创建一个行数组。

你想要双重爆炸每一行,一旦在制表上分开家庭动物,第二次分裂<强>动物个别。

要创建一个包含家庭和动物的精美结构数组,请尝试以下操作并在不同步骤添加一些var_dump以查看逻辑:

$file = file('animals.txt');

$groupedAnimals = array();
foreach ($file as $line) {
    // First explode on tabulations
    $line = explode("\t", $line);

    $family = $line[0];
    // Then explode on commas
    $animals = explode(',', $line[1]);

    foreach ($animals as $animal) {
        $groupedAnimals[$family][] = $animal;
    }
}

应该填充groupedAnimals数组:

Array
(
    [fishes] => Array
        (
            [0] => shark
            [1] => tuna
            [2] => salmon

        )

    [birds] => Array
        (
            [0] => parrot
            [1] => pigeon

        )

    [mammals] => Array
        (
            [0] => cow
            [1] => dog
            [2] => cat
        )

)

填充groupedAnimals数组后,只需按照您的模板打印它们即可:

<ul type="disc">
    <?php foreach ($groupedAnimals as $family => $animals): ?>
        <li>
            <?php echo $family ?>
            <ul>
                <?php foreach ($animals as $animal): ?>
                    <li><?php echo $animal ?></li>
                <?php endforeach ?>
            </ul>
        </li>
    <?php endforeach ?>
</ul>

答案 1 :(得分:1)

function xxAxx(){

    $output='';

    $file = fopen('animals.txt', 'r');
    while (!feof($file))
    {
        $line = fgets($file);
        //replace white spaces with a different delimiter
        $line = preg_replace('/\s+/', '-', $line);
        $line = trim($line);
        // explode with your delemeter
        $a = explode("-", $line);
        $category = $a[0];
        $categoryItems = explode(",", $a[1]);

        $output .= "<li>".$category ."<br>";
        $output .= "<ul type='disc'>";
        foreach ($categoryItems as $item) {
            $output .= '<li>'.$item.'</li>';
        }
        $output .= "</ul>";
        $output .= "</li>";

    }
    fclose($file);

    return $output;
}

?>

<ul type="disc">
    <?php echo xxAxx(); ?>
</ul>