PHP:过滤和发布文本文件

时间:2015-04-29 11:48:54

标签: php csv text-files filtering

我有一个文本文件,其中包含人员姓氏,地址,事故发生时间和事故原因。我需要仅由出于同样原因至少调用两次的人过滤此文件并回显它。 我是一个相当陌生的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个空格,但它不再重要,所以我可以保留数组。

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

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

只需要重复那些具有匹配的姓氏和原因的人。

2 个答案:

答案 0 :(得分:2)

<强>更新

你的文本文件包含字符串,由行制动器分隔的条目和三个空格(实际上是html编码空格)的值。

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

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

首先,我们得到每一行:

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

然后推送值数组:

$whole_ar = array();
foreach($entries as $e){
   $whole_ar[] = explode('&nbsp;&nbsp;&nbsp;',$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"

你有这个字符串变量,如上所述。 然后你可以用空格字符爆炸字符串:$data = explode(" ",$newest);它会为你提供一个包含多个值的数组。第一个值是姓氏,最后一个是事故原因。

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

您可以将这些值分配给变量,并查看数据库中是否存在此姓氏和事故,而不是回显:

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

P.S。 dot(。)用于连接字符串

答案 1 :(得分:0)

这应该让你开始:

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()传递的数组中。此函数将解析该行并返回行值的数组。 / p>

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

  • 第4行... - 循环$all检查$names中是否存在密钥,如果确实存在,则打印行并移动计数器,否则在{{1}中设置新密钥并将其值设置为1(计数器)。