0

马上,我知道这里已经有很多关于使用 Glob() 来提供 foreach 循环的线程。我已经阅读了所有我能找到的内容,但我仍然遇到困难,所以我会在这里发布我的代码,以防我遗漏了一些东西。

我的目标:使用 foreach 循环将 HTML 页面包装在一些标记中并将它们显示在我的页面上。我本可以将 HTML 直接写入我的页面,但我预计在接下来的几周内会有很多变化和添加,而且我担心版本重叠(这里不能使用版本控制。)

到目前为止,我有这个脚本拉入页面并显示它们,但 IF 逻辑没有触发。我在这里做错了什么?

<?php

        $directory = 'includes/pages';
        $dirIT = new DirectoryIterator($directory);
        try {        
            // Pull in HTML files from directory    

            foreach ( $dirIT as $key => $item ) {           
                if ($item->isFile()) {

                    if ( $key == '0')
                    {
                        echo "<div class=\"one-third column alpha\">";
                        $path = $directory . "/" . $item;
                        include $path;
                        echo "</div>";
                    }

                    elseif ($key == count ( dirIT ) - '1' )
                    {
                        echo "<div class=\"one-third column omega\">";
                        $path = $directory . "/" . $item;
                        include $path;
                        echo"</div>";
                    }

                    else
                    {
                    echo "<div class=\"one-third column\">";
                    $path = $directory . "/" . $item;   
                    include $path;  
                    echo "</div>";
                    }
                }
            }   
        }   
        catch(Exception $e) {
            echo 'There are no pages to display.<br />';    
        }
    ?>
4

3 回答 3

2

在以下else if语句中,您有一个小错字,并且没有使用实际变量:

elseif ($key == count ( dirIT ) - '1' )

dirIT应该是$dirIT。尝试更新到以下内容,看看是否有帮助:

elseif ($key == (count($dirIT) - 1))

旁注:因为$dirIT不会在循环内部发生变化,所以您可以在进入循环之前预先计算它,以防止每次都重新计算。例如,您可以拥有:

$dirITCount = (count($dirIT) - 1);
foreach ( $dirIT as $key => $item ) { 
    ...
    } else if ($key == $dirITCount) {
于 2013-03-14T15:42:11.160 回答
1

正如@newfurniturey 所说,问题是由线路丢失引起$elseif

我想建议重写你的代码:

$g = glob('includes/pages/*.html');
$c = count($g);
if( $c > 0) {
    foreach ( $g as $key => $item ) {
        echo '<div class="one-third column';
        if( $key == 0) echo ' alpha';
        if( $key == $c-1) echo ' omega';
        echo '">';
        include $item;
        echo '</div>';
    }
}
else {
    echo 'There are no pages to display.<br />';    
}
于 2013-03-14T15:46:29.763 回答
0

很可能问题出在您的isFile()功能上。尝试使用简单的本机 ( http://php.net/manual/en/function.is-file.php )is_file()函数来检查特定项目是否为文件。

于 2013-03-14T15:40:57.070 回答