-1

テキスト ファイルを含むディレクトリがあり、新しいテキスト ファイルが毎日追加されます。各テキスト ファイルは、4 行のテキストを含む学校のレッスンです。行 1 はレッスン番号、行 2 はレッスンのタイトル、行 3 は説明、行 4 は期日です。

PHP で、現在および将来のすべてのテキスト ファイルを読み取り、それらを HTML テーブルに配置できるようにする必要があります。レッスン番号、レッスン タイトル、説明、期日というラベルの付いたテーブルの 4 つの列。各テキスト ファイルは 1 つのテーブル行です。

ホームスクーリングの生徒を支援するサイトを作成しましたが、この機能をサイトに追加して、過去、現在、および将来のすべてのレッスンを表示できるようにしたいと考えていました。私はPHPを少し知っていますが、頭を包むことはできません。試行すればするほど混乱するようです。これは私にとって学習経験です。

使用してみましfopenたが、ディレクトリ全体ではなくテキストファイルを開くことしかできません。ディレクトリのリストを取得し、それを配列に配置fopenし、配列内の各ファイルを開くために使用する必要があると考えていましたが、そうではないかもしれません。私を正しい方向に向けるための助けは大歓迎です!

4

3 に答える 3

1

あなたのアプローチはそれを行う1つの方法です。必要なファイルのディレクトリをスキャンし、file()関数を使用してファイルの内容を配列で取得できます。ディレクトリからファイル名を取得することは明らかであるため、部分的なコードのみを投稿します(glob()他の回答を参照)。

//配列内の特定のディレクトリからファイル リストを取得します (配列にはファイル名が含まれます)。//ファイル名にはスクリプトへのフル パスまたは相対パスを指定することをお勧めします

$task_array = Array();

foreach ($filelist as $filename)
{
    try
    {
        $file_content = file($filename); // we get an array with this function
        // you could do this the other way, by using fopen() and fread(), but this is easier
    }
    catch(Exception $e)
    {
        $(file_content = false;
    }

    if (($file_content !== false) && (!empty($file_content)))
    {
        $task_array[] = $file_content;
    }
}

タスク配列は、次のように 2 次元配列になります。

Array(

    [0] -> Array(
        [0] -> 1
        [1] -> 'Lesson Title'
        [2] -> 'Lesson Description here'
        [3] -> '2013-09-25'
    )

    [1] -> Array(
        [0] -> 2
        [1] -> 'Lesson Title 2'
        [2] -> 'Lesson 2 Description here'
        [3] -> '2013-09-25'
    )
)

次に、この配列を取得したら、再び foreach を使用して HTML で表示できます。

ただし、これを正しい方法で行いたい場合は、MySQL などのデータベースを使用する必要があります。

于 2013-09-09T19:29:20.477 に答える
0

これは、ディレクトリをトラバースしてファイルを読み取る方法です。

$dir = "/YOUR_DIRECTORY_PATH/*";

foreach(glob($dir) as $file) { //load each file in the directory

    $fileHandle = fopen($file, "r");

    while (!feof($fileHandle)) {   // load each line
        $line = fgets($fileHandle);
        echo $line . '<br />';
    }
    fclose($fileHandle);
}
于 2013-09-09T19:17:34.170 に答える