PHP全局变量在第一次循环迭代时显示为null

时间:2012-08-28 09:53:58

标签: php include

抱歉无法构成更好的标题。 所以这就是问题所在 我在functions.php中有一个函数

function show_news(){
$id_counter = 1;
$json_news = array(
        "id" => 0,
        "title" => ""
    );
$json_o = json_decode(file_get_contents(JSON_DATA_FOLDER.'news.json'));
foreach ($json_o as $id => $news_category)
{
    echo '<h2>'.$id.'<h2>';
    foreach ($news_category as $news)
    {
        if(IsNullOrEmptyString($news->id)){$json_news['id'] = $id_counter; $id_counter++;}
        else{$json_news['id']=$news->id;}
        if(!IsNullOrEmptyString($news->title)){$json_news['title']=$news->title;}
        var_dump($json_news);
        echo "<br/>-------<br/>";
        include('news-layout.php');
    }
}
}

我正在读取一个json文件,并且我将每个元素的值分配给一个数组。 然后我包括'news-layout.php'。出于测试目的,我在'news-layout.php'

中保留了这3行代码
<?php 
global $json_news;
var_dump($json_news);
echo"<br/>=======================<hr/>";
?>

所以我在我的函数内部以及包含的页面上执行var_dump。但我得到了奇怪的结果。一切正常,除了包含页面上的var_dump($ json_news)在循环的第一次迭代中显示NULL! 这是输出

todays_specials
array(2) { ["id"]=> int(1) ["title"]=> string(26) "Okie Since I have to do it" } 
-------
NULL 
=======================
array(2) { ["id"]=> int(2) ["title"]=> string(16) "Vegetable Samosa" } 
-------
array(2) { ["id"]=> int(2) ["title"]=> string(16) "Vegetable Samosa" } 
=======================
array(2) { ["id"]=> int(3) ["title"]=> string(16) "Vegetable Pakora" } 
-------
array(2) { ["id"]=> int(3) ["title"]=> string(16) "Vegetable Pakora" } 
=======================

你可以看到那里出现奇怪的NULL。 任何人都可以解释发生了什么或如何解决它?

1 个答案:

答案 0 :(得分:0)

你的$ json_news var首先是函数文件的本地。然后包含布局文件并创建全局$ json_news var,从那时起使用全局。在函数文件中将它设置为global并删除布局文件中的变量声明,你应该好好去!

像这样:

function show_news(){
    $id_counter = 1;
    global $json_news = array(
        "id" => 0,
        "title" => ""
    );
    $json_o = json_decode(file_get_contents(JSON_DATA_FOLDER.'news.json'));
    foreach ($json_o as $id => $news_category){
        echo '<h2>'.$id.'<h2>';
        foreach ($news_category as $news){
            if(IsNullOrEmptyString($news->id)){
                $json_news['id'] = $id_counter; $id_counter++;
            }else{
                $json_news['id']=$news->id;
            }
            if(!IsNullOrEmptyString($news->title)){
                $json_news['title']=$news->title;
            }
            var_dump($json_news);
            echo "<br/>-------<br/>";
            include('news-layout.php');
        }
    }
}

'新闻-layout.php中'

<?php 
var_dump($json_news);
echo"<br/>=======================<hr/>";
?>

附注:不建议使用像这样的全局变量!