1

我正在使用一个简单的 php 新闻脚本,我想要查看单个帖子的选项(而不是文件中的每个帖子,这是它当前的工作方式)。

这是前端使用的代码,我很不确定我需要做什么,但我知道它涉及一个 GET 参数......

<?php

//get news class and array
include_once('newsadmin/includes/newsTools.class.inc.php');
$newsTools      = new newsTools('newsadmin/csv/news.csv');

    $news_headlines = $newsTools->getNewsArray();
//output news array as formatted html
if (!count($news_headlines)>0){
    echo '<p>There are currently no news headlines.</p>';
}else{
    foreach ($news_headlines as $key => $item){
        list($news_id,$news_date,$news_title,$news_body) = $item;
        $formatted_date = date('F j, Y, g:i a',$news_date);
echo <<<HTML
<a name="$news_id" id="$news_id"></a>
<h1 style="margin-bottom: 20px;">$news_title</h1>
$news_body
<p><span>Posted: $formatted_date</span></p>
<hr />
HTML;
    }
}

?>

我认为它与这一行有关:foreach ($news_headlines as $key => $item){

提前致谢 :)

4

1 回答 1

2

我的建议是改变getNewsArray()方法以不同的方式构建你的$news_headlines数组。

所以不要有这样的数组:

[
    ['NEWS ID VALUE', 'NEWS DATE VALUE', 'NEWS TITLE VALUE', 'NEWS BODY VALUE'],
    ['NEWS ID VALUE 2', 'NEWS DATE VALUE 2', 'NEWS TITLE VALUE 2', 'NEWS BODY VALUE 2'],
    ...
] 

您可以像这样构建一个数组:

[
    'NEWS ID VALUE' => ['NEWS DATE VALUE', 'NEWS TITLE VALUE', 'NEWS BODY VALUE'],
    'NEWS ID VALUE 2' => ['NEWS DATE VALUE 2', 'NEWS TITLE VALUE 2', 'NEWS BODY VALUE 2'],
    ...
]

这里的新闻 ID 是关联数组中的键。它的作用是允许您从数组中查找新闻项目,而无需遍历数组。所以可以做这样的事情:

//get news class and array
include_once('newsadmin/includes/newsTools.class.inc.php');
$newsTools      = new newsTools('newsadmin/csv/news.csv');

$news_headlines = $newsTools->getNewsArray();

if(!empty($_GET['news_id'])) {
    // a single news item was requested
    $news_id = $_GET['news_id'];
    if (isset($news_headlines[$news_id])) {
        // the news item was found in the array
        $news_item = $news_headlines[$news_id];
        // display your story
        var_dump($news_id,$news_item);
    } else {
        // they requested an invalid news item, show some error here
    }
} else {
    //output news array as formatted html
    if (!count($news_headlines)>0){
        echo '<p>There are currently no news headlines.</p>';
    } else {
        foreach ($news_headlines as $news_id => $item){
            list($news_date,$news_title,$news_body) = $item;
            $formatted_date = date('F j, Y, g:i a',$news_date);
?>
            <a name="<?php echo $news_id; ?>" id="<?php echo $news_id; ?>"></a>
            <h1 style="margin-bottom: 20px;"><?php echo $news_title; ?></h1>
            <?php echo $news_body; ?>
            <p><span>Posted: <?php echo $formatted_date; ?></span></p>
            <hr />
<?php
        }
    }
}
?>

如果您的 CSV 文件中有大量项目,您可能还需要考虑将这些数据移动到数据库中(如果可能)。这将避免在只需要一个项目时将所有数据加载到内存中,并且如果您可能想做这样的事情,还可以更轻松地执行按日期排序、按日期范围显示记录等操作下线。

于 2013-11-14T20:10:39.357 回答