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 に答える