0

それらのニュースをホームページに印刷する必要があります。私が設定したindex.phpファイルにこのファイルを以下に含めますが、何も返されません...エラーはどこにありますか?スクリプトはファイルからニュースを取得します。次に、各ニュースを文字列に設定します。次に、関数はニュースごとに「標準」エコーを作成します。次に、ニュースが印刷されます。

しかし、何も印刷されません...

みなさん、ありがとうございました!

<?php
if (file_exists("./public/ita/news/news.txt")) {
$getnews1 = "./public/ita/news/news.txt";
$news1 = file($getnews1); //file in to an array
}

if (file_exists("./public/ita/news/news2.txt")) {
$getnews2 = "./public/ita/news/news2.txt";
$news2 = file($getnews2); //file in to an array
}

if (file_exists("./public/ita/news/news3.txt")) {
$getnews3 = "./public/ita/news/news3.txt";
$news3 = file($getnews3); //file in to an array
}

if (file_exists("./public/ita/news/news4.txt")) {
$getnews4 = "./public/ita/news/news4.txt";
$news4 = file($getnews4); //file in to an array
}

if (file_exists("./public/ita/news/news5.txt")) {
$getnews5 = "./public/ita/news/news5.txt";
$news5 = file($getnews5); //file in to an array
}

function post_news()
    {
        echo '<div align="left" class="newstitle">';
        echo $news[0];
        echo '</div>';

        echo '<div align="left" class="news">';
        echo '<p></p>';
        echo $news[1];
        echo $news[2];
        echo $news[3];
        echo $news[4];
        echo $news[5];
        echo $news[6];
        echo $news[7];
        echo $news[8];
        echo $news[9];
        echo $news[10];
        echo $news[11];
        echo '</div>';
    }

if($news1 != NULL) {
    $news = $news1;
    post_news();
}

if($news2 != NULL) {
    $news = $news2;
    post_news();
}

if($news3 != NULL) {
    $news = $news3;
    post_news();
}

?>
4

2 に答える 2

1

ここで多くの間違い。

1-配列を作成していません$news$news上部に配列を作成し、それを入力します。

$news = array();
$news[0]=file(...)

2-いずれの場合$newsもグローバルではないため、関数はそれを認識できません。関数を変更して、変数を渡せるようにします。

function post_news($news){...

そしてそれを

post_news($news);

または、ニュースアレイをグローバルにします。$newsこれを行うには、グローバル配列()として作成してから、グローバル配列から関数内でアクセスするか、関数の先頭で$GLOBALS['news']=array()呼び出します。global $news

3-について学ぶisset()$news[0], etcそのキーの要素が存在することを確認せずに、各ニュースアイテムを印刷しようとします。foreach()ループを使用してみてください。

4-ニュースアイテムを配列としてプロパティ設定し、変数スコープを正しく取得し、foreachループを使用すると仮定すると、配列試行しechoます...これは実行できません。file()呼び出しを変更するかfile_get_contents()、各ニュースアイテムの各要素をループして、文字列を出力します。

全体として、スコープ、配列、およびループについて詳しく知る必要があります。

このコードを見てください。私は各ステップで何をしているのか、そしてなぜそれがより良いアプローチであるのかを説明しようとしました:

<?php
//Create an array with all the possible news items
$possible_files = array(
    "./public/ita/news/news.txt",
    "./public/ita/news/news2.txt",
    "./public/ita/news/news3.txt",
    "./public/ita/news/news4.txt",
    "./public/ita/news/news5.txt"
);

//Now loop through these files, check if they exist, and then pass the lines into your function
foreach($possible_files as $possible_file){
    if (file_exists($possible_file)){
         /*why create an array and then loop through it?
           Do everything here... grab the lines and then
           have it echeod out via post_news() in one step */
        $lines_of_news_items = file($possible_file);    
        //PASS this array into the function!
        post_news($lines_of_news_items); 
    }
}

function post_news($news_item_lines){
    //watch out for align='left'... it's an antiquated attribute
    echo '<div align="left" class="newstitle">';
    //print the first line here
    echo $news_item_lines[0]; 
    echo '</div>';
    echo '<div align="left" class="news">';
    //btw, this <p></p> is bad practice... if you're trying to create space use css
    echo '<p></p>'; 
    //now loop though each line, starting with the second line ([1])
    for($i=1;$i<count($news_item_lines);$i++){ 
        echo $news_item_lines[$i];
    }
    echo '</div>';
}
?>
于 2013-01-22T02:11:39.570 に答える
0

問題は関数です。そこで使用し$newsていますが、グローバル変数として宣言しておらず、関数に渡していません。

したがって$news、関数では定義されていません。

関数呼び出しをで置き換え、post_news($news);関数定義をで置き換える必要がありますfunction post_news($news)(グローバル変数は悪いです...)。

于 2013-01-22T02:07:28.730 に答える