各位技术帝,帮忙写个 PHP 查询 TXT 里面内容的查询页面
如: TXT 内容
张三----2015 年 10 月 2 日 10 时[email protected]
李四----2015 年 10 月 2 日 10 时[email protected]
王五----2015 年 10 月 2 日 10 时[email protected]
PHP 页面输入 [email protected] 此邮箱就能显示张三这条信息,输入其他的则不返回信息
如何实现
1
sunjourney 2015-11-03 11:57:09 +08:00 via iPhone
这有点难啊,可能你培训老师会知道
|
2
realpg 2015-11-03 11:58:15 +08:00
这个太难了。问一下你的培训机构老师吧。
|
3
rainysia 2015-11-03 11:58:26 +08:00
这有点难啊,可能你培训老师会知道
|
4
rainysia 2015-11-03 11:59:09 +08:00
这有点难啊 ~可能你培训老师会知道
|
5
faceair 2015-11-03 12:00:34 +08:00
读文件 根据换行符切分成数组 遍历数组根据输入匹配行 输出行
|
6
jugelizi 2015-11-03 12:02:35 +08:00
是有点难 楼下会吗
|
7
Neytoph 2015-11-03 12:03:55 +08:00
等我问问我师父
|
8
zakokun 2015-11-03 12:04:59 +08:00
稍等,我请教下我们公司的 CTO
|
9
wjself 2015-11-03 12:06:10 +08:00
233 ,不要這樣嘛…直接 if 語句寫滿要判斷的郵箱不就好了嘛…
|
10
dofy 2015-11-03 12:14:33 +08:00
```php
<?php $txt = '张三----2015 年 10 月 2 日 10 时[email protected] 张三 A----2015 年 10 月 2 日 10 时[email protected] 李四----2015 年 10 月 2 日 10 时[email protected] 王五----2015 年 10 月 2 日 10 时[email protected]'; $email = '[email protected]'; $newEmail = str_replace('.', '\.', $email); $reg = "/.*?\-$newEmail$/m"; preg_match_all($reg, $txt, $result); var_dump($result); ?> ``` |
11
wkdhf233 2015-11-03 12:15:05 +08:00
$mail = '[email protected]';
$fp = fopen('data.txt', "r"); while (!feof($fp)) { $line = trim(fgets($fp)); if($mail == split('----', $line)[4]){ echo $line; } } |
12
dofy 2015-11-03 12:15:10 +08:00
原来回复不支持 markdown 啊。。。
|
13
solupro 2015-11-03 12:18:57 +08:00
其实调用系统命令也是一种选择, awk 不懂就不举例了 |
14
b821025551b 2015-11-03 12:20:04 +08:00
@solupro 哇这是什么呀看起来好厉害的样子~
|
15
solupro 2015-11-03 12:24:01 +08:00
@b821025551b
有必要这样冷嘲热讽吗? |
16
7z7 2015-11-03 12:26:40 +08:00
分割成为数组,那样就可以取出了。
|
17
infong 2015-11-03 12:40:58 +08:00
|
21
LioMore 2015-11-03 13:24:34 +08:00
@b821025551b 有必要这样冷嘲热讽吗?
|
22
myleon 2015-11-03 13:34:52 +08:00
转成 csv 大把的类可以让你调用
|
23
SharkIng 2015-11-03 13:38:32 +08:00
file()
array() if() |
25
hambut 2015-11-03 14:16:55 +08:00 1
|
26
jarlyyn 2015-11-03 14:52:13 +08:00
csv 或者正则
|
27
tabris17 2015-11-03 14:57:01 +08:00
这道题只有北大青鸟的校长才会做了,太难了
|
28
liujiantao 2015-11-03 15:05:20 +08:00 via iPhone
fopen 读文件,再分隔字符串
|
29
hongcha 2015-11-03 15:39:16 +08:00
|
30
moro 2015-11-03 15:46:55 +08:00
这个问题有一个点需要考虑,就是不能把所有文件全部读入进来,如果这个文件很大的话,内存会爆掉。
可以用随机读写的函数, fseek,fgets 等 <?php $handle = @fopen("./inputfile.txt", "r"); $finder = "[email protected]"; if ($handle) { while (($buffer = fgets($handle, 4096)) !== false) { if (strpos($buffer, $finder) != false ){ echo $buffer; } } if (!feof($handle)) { echo "Error: unexpected fgets() fail\n"; } fclose($handle); } |
31
codingpp 2015-11-03 16:05:41 +08:00
|
33
500miles 2015-11-03 16:29:36 +08:00
我天 怎么都这副模样
人都没说数据大小好么 ... 一个劲的热潮冷讽... 且不说 3P 了, 就 3T 数据吧 ........ |
36
jalen 2015-11-04 08:51:59 +08:00
不解, 怎么确定就是培训老师出的题目?
|
37
hongqigong OP @moro @ solupro @dofy 请问这个代码有什么问题? 如何来写输出的内容?
<html> <head> <meta charset="utf-8"> </head> <body> <form method="post" action=""> 输入想要搜索的内容:<input type="text" name="content" /></br> <input type="submit" value="search" /> </form> </body> </html> <?php $search=$_POST['content']; $fh=fopen("text.txt","r"); while(! feof($fh)) ==true){ if($str['0']==$search){ echo $str['1']."</br>"; } } fclose($fh); ?> |
38
zjqzxc 2015-11-04 11:06:34 +08:00
"PHP 页面输入 [email protected] 此邮箱就能显示张三这条信息,输入其他的则不返回信息"
楼主的意思明明是: if($str=='[email protected]') echo '张三----2015 年 10 月 2 日 10 时[email protected]'; 读文件干嘛。。 是吧,,“输入其他的则不返回信息”,是这么理解的吧。 |
39
hongqigong OP @zjqzxc 差不多 是这个意思, TXT 里面内容都是这样的格式 主要是搜索邮箱 出这列的结果 其他的都不出现 ~~~ 现在不知道怎么来写了~~~
|
40
mengzhuo 2015-11-04 11:24:04 +08:00
没有索引,没有其他条件的话
O(N)是跑不了了 |
41
dofy 2015-11-04 14:21:16 +08:00
|
42
elvba 2015-11-09 15:04:56 +08:00
$path = 'tmp.txt';
$input = '[email protected]'; if (!file_exists($path)) return; $ret = array_filter(file($path), function ($v) use ($input) {return strstr($v, $input) !== false;}); var_dump($ret); |
43
inmyfree 2015-11-19 17:53:01 +08:00
php 的代码我就不给了,给了一个 shell 的结合 cat,grep ,和正则查找的,php 逻辑是一样的,有兴趣的可以看看
https://github.com/inmyfree/gits/blob/master/grep_php.md |