首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从文本文件和PHP中的一行编辑特定记录

从文本文件和PHP中的一行编辑特定记录
EN

Stack Overflow用户
提问于 2013-09-25 07:48:35
回答 2查看 3.8K关注 0票数 1

我试图用PHP和文本文件制作一个简单的新闻点击计数器。我编写了一个简单的代码来检查和读取文件:

文本文件:

代码语言:javascript
复制
//Data in Source File
//Info: News-ID|Hits|Date
1|32|2013-9-25
2|241|2013-9-26
3|57|2013-9-27

PHP文件:

代码语言:javascript
复制
//Get Source
$Source = ENGINE_DIR . '/data/top.txt';
$Read = file($Source);

//Add New Record
foreach($Read as $News){
  //Match News ID
  if($News[0] == "2"){
    //Add New Record and Update the Text File
  }
}

问题是我不能改变新闻热点!例如,我需要将第二行的点击量从241更改为242,并将其再次写入txt文件。

我在这个网站和谷歌搜索,并尝试了一些方法,但我无法修复。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-25 07:56:51

至少,您忘记将增量写回文件。另外,您需要将每一行解析为可以使用的列(由管道|分隔)。

未经测试的代码,但想法是:

代码语言:javascript
复制
$Source = ENGINE_DIR . '/data/top.txt'; // you already have this line
$Read = file($Source); // and this one

foreach ( $Read as $LineNum => $News ) { // iterate through each line
    $NewsParts = explode('|',$News); // expand the line into pieces to work with
    if ( $NewsParts[0] == 2 ) { // if the first column is 2
        $NewsParts[1]++; // increment the second column
        $Read[$LineNum] = implode('|',$NewsParts); // glue the line back together, we're updating the Read array directly, rather than the copied variable $News
        break; // we're done so exit the loop, saving cycles
    }
}

$UpdatedContents = implode(PHP_EOL,$Read); // put the read lines back together (remember $Read as been updated) using "\n" or "\r\n" whichever is best for the OS you're running on
file_put_contents($Source,$UpdatedContents); // overwrite the file
票数 5
EN

Stack Overflow用户

发布于 2013-09-25 07:56:03

您可以读取该文件并执行如下操作:

代码语言:javascript
复制
//Get Source
$Source = ENGINE_DIR . '/data/top.txt';
$Read = file($Source);

$News = array();

foreach ($Read as $line) {
    list($id, $views, $date) = explode('|', $line);
    $News[$id] = array(
        'id' => $id,
        'views' => $views,
        'date' => $date,
    );
}

此时,您有一个包含每个新闻条目的数组$News,您可以根据自己的意愿对它们进行更改(例如:$News[2]['views'] = 242;)。

您现在所缺少的唯一东西就是将其写回文件部分,这也很容易。

代码语言:javascript
复制
$fh = fopen(ENGINE_DIR . '/data/top.txt', 'w'); //'w' mode opens the file for write and truncates it

foreach ($News as $item) {
    fwrite($fh, $item['id'] . '|' . $item['views'] . '|' . $item['date'] . "\n");
}

fclose($fh);

就这样!)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18999150

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档