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 回答