PHP:过滤和发布文本文件

PHP:过滤和发布文本文件,php,csv,text-files,filtering,Php,Csv,Text Files,Filtering,我有一个文本文件,其中包含一个人的姓氏、地址、事故发生时间和事故原因,并用一行空格隔开。我只需要按出于相同原因至少打过两次电话的人筛选此文件,并对其进行回显。 我对PHP相当陌生,所以我想要一个简单的方法。:) 多谢各位 编辑: 我没有尝试过任何东西,因为我甚至不知道如何过滤文件内容 $data = array($_POST['surname'], $_POST['address'], $_POST['time'], $_POST['reason']); $info = implode("&am

我有一个文本文件,其中包含一个人的姓氏、地址、事故发生时间和事故原因,并用一行空格隔开。我只需要按出于相同原因至少打过两次电话的人筛选此文件,并对其进行回显。 我对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

它只需要重复相同的人,他们有匹配的姓氏和原因。

如果我理解清楚,txt文件是一个csv文件,使用空格作为列的删除符。所以使用函数来加载每行的列。指定空白空间作为定界符。< /P> < P> <强>更新< /强>

文本文件包含字符串、按行分隔的条目和按三个空格分隔的值(实际上是html编码的空格)

在这里,我们在中读取整个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);

据我所知,当用户来电时,您会得到如下信息:

$newest = "Huchinson Estonia Tallin Geo street 13 2015.12.02 13:44 Gas leak"
变量中有这个字符串,如上所述。 然后您可以按空格字符分解字符串:
$data=explode(“,$newest”),它为您提供一个包含多个值的数组。第一个值是姓氏,最后一个值是事故原因

像这样从数组中解析它们:
echo$data[0]//这将是姓氏
echo end($data)//这将是事故类型

您可以将这些值指定给变量,并查找数据库中是否存在此姓氏和事故,而不是echo:

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

p、 s.dot(.)用于连接字符串,您可以从中开始:

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\u getcsv(行,分隔符)

说明:

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

  • 第3行-数组
    $names
    将充当我们的内存,最后它将保存所有名称+原因作为键,该值将是发生的计数器

  • 第4行…-循环执行
    $all
    检查键是否存在于
    $names
    中,如果存在,则打印行并移动计数器,否则在
    $names
    中设置新键并将其值设置为1(计数器)


你试过什么吗?请展示你的尝试。还包括一个输入文件和预期输出的示例答案似乎对多维数组不起作用,我注意到“数组到字符串的转换”,尽管你的帖子确实帮了我很多。变量
$newest
是一个数组,要查看它的外观,请执行
echo(“”);印刷(最新);回声(“”)我想它将包含值数组的数组(二维)。我刚刚意识到$newest将在条目上包含重复值,其中不仅姓氏和意外值相同,而且整个数组都相同。对不起,我还没有测试我的帖子。也许在解析重复的姓氏和意外条目时,
array\u column
函数可能会派上用场。谢谢。
if($saved_before == $data[0].end($data)){
   echo "we are working on ".end($data).", be patient, dear ".$data[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;
    }
}