PHP: 过滤并发布一个文本文件

PHP: Filtering and posting a text file

我有一个文本文件,其中包含一个人的姓氏、地址、事故时间和事故原因,一行中用白色 space 分隔。我需要仅通过出于相同原因至少两次调用并回显的人来过滤此文件。 我是 PHP 的新手,所以我想要一个简单的方法。 :) 谢谢。

编辑: 我没有尝试任何东西,因为我什至不知道如何过滤文件内容。

$data = array($_POST['surname'], $_POST['address'], $_POST['time'], $_POST['reason']);
$info = implode("   ", $data)
$info .= "\r\n";
serialize($info);
file_put_contents("data.txt", $info, FILE_APPEND);
serialize($info);

这就是我将它写入文件的方式。 我爆破了文件,因为我需要让它们由 3 个白色 space 分隔,但这不再重要,所以我可以保留数组。

预期的输出应该是这样的:

Surname   Address   Time   Reason
Adams   Railroad 5   13:20   Heart Attack
Adams   Railroad 5   23:35   Heart Attack

只需要重复具有匹配姓氏和原因的同一个人。

如果我理解得很好,txt 文件是一个 csv 文件,它使用 space 作为列的分隔符。所以使用 fgetcsv 函数来加载每一行的列。指定空格 space 作为分隔符。

更新

您的文本文件包含字符串、由换行符分隔的条目和由三个 space 分隔的值(实际上 html 编码为 space)。

这里我们读取整个 txt 文件,(有些人可以按行 line):

$whole_string = file_get_contents('data.txt');

所以首先我们得到每一行:

$entries = explode('\n',$whole_string);

然后压入值数组:

$whole_ar = array();
foreach($entries as $e){
   $whole_ar[] = explode('   ',$e);
}//if 3 spaces in file are in html

我们得到:

array(
    array(
    'name','date','etc..'
    ),
    array(
    'name2','date','etc..'
    ),
    array(
    'name2','date','etc..'
    )
)

您可以将数组存储在 php 文件中,以便以后 include('data.php'); 像这样:

$file = '<?php $whole_ar='.var_export($whole_ar, TRUE)."; ?>";
file_put_contents('data.php', $file);

关于如何将此数组解析为目标副本的主要答案是迭代 or:

$answer = array_unique(array_diff_assoc($whole_ar, array_unique( $whole_ar)));

据我了解,当用户呼入时,您会得到这样的信息 string

$newest = "Huchinson Estonia Tallin Geo street 13 2015.12.02 13:44 Gas leak"

你在变量中有这个字符串,如上所述。 然后你可以 explode string by space characters: $data = explode(" ",$newest); 这给你一个包含值的数组。第一个值是姓氏,最后一个值是事故原因。

像这样从数组中解析它们:echo $data[0];//this will be surnameecho end($data);//this will be accident type

您可以将这些值分配给变量,然后查找您的数据库中是否存在此姓氏和意外事故,而不是 echo:

if($saved_before == $data[0].end($data)){
   echo "we are working on ".end($data).", be patient, dear ".$data[0];
}

p.s。点 (.) 用于连接字符串

这应该让你开始:

function parseIt($line) { return str_getcsv($line, "   "); }
$all = array_map('parseIt', file('yourfile.txt'));
$names = array();
foreach ($all as $row) { 
    $uniqkey = $row[0].$row[3];
    if (isset($names[$uniqkey])) {
        echo implode(" ",$row);
        $names[$uniqkey]++;
    } else {
        $names[$uniqkey] = 1;
    }
}

我注意到您在编写代码的文件中使用了 3 个空格的分隔符,所以我在示例中使用了它 - 您可以在 str_getcsv(line, delimiter)

中将其设置为任何您想要的

解释:

  • 第 1,2 行 - file() 将文件读入一个数组,该数组通过函数 parseIt() 此函数将解析行和 return行值数组。

  • 第 3 行 - 数组 $names 将充当我们的记忆,最后它将所有名称 + 原因作为键,值将是出现次数的计数器。

  • 第 4 行... - 遍历 $all 检查键是否存在于 $names 中,如果存在则打印该行并移动计数器,否则设置一个新键在 $names 中并将其值设置为 1(计数器)。