我有一个文本文件,其中包含人员姓氏,地址,事故发生时间和事故原因。我需要仅由出于同样原因至少调用两次的人过滤此文件并回显它。 我是一个相当陌生的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
只需要重复那些具有匹配的姓氏和原因的人。
答案 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(' ',$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 surname
和echo 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(计数器)。