PHP:Find from制表符分隔的文本文件,不带while循环
我有一个以制表符分隔的文本文件(TXT),包含超过100万行(记录),文件大小约为400 MB 范例PHP:Find from制表符分隔的文本文件,不带while循环,php,Php,我有一个以制表符分隔的文本文件(TXT),包含超过100万行(记录),文件大小约为400 MB 范例 demo 123333 new demo2 3444442 new demo4 56666632 old demo5 455552333 new 所以现在我想找出第二个标签中的哪一行等于“56666632” 还可以将该行covert的所有制表符值转换为数组,如下所示: data[0]=>demo4 data[1]=>56666632 d
demo 123333 new
demo2 3444442 new
demo4 56666632 old
demo5 455552333 new
所以现在我想找出第二个标签中的哪一行等于“56666632”
还可以将该行covert的所有制表符值转换为数组,如下所示:
data[0]=>demo4
data[1]=>56666632
data[2]=>old
注意:我不想使用while和foreach,因为txt文件中有很多行
我正在使用while循环尝试此代码:
$file = "feed.txt";
$cols = array();
ini_set('auto_detect_line_endings', true);
$fh = fopen($file, 'r');
while (($line = fgetcsv($fh, 1000, "\t")) !== false)
{
if($line[1]=="56666632")
{
var_dump($line);
break;
}
}
如果您在Linux机器上,您可以尝试将作业委托给grep:
$line = shell_exec('grep -P "\t56666632\t" feed.txt');
如果没有
foreach
或while
循环,您将很难做到这一点。很难,事实上,我甚至不会浪费时间寻找答案
如果您使用的是类Unix计算机,请使用grep
:
grep -nE \
'^[^[:space:]]+[[:space:]]+56666632[[:space:]]+[^[:space:]]+' \
feed.txt \
| awk -F: '{print $1}'
正则表达式将按顺序搜索包含以下内容的字符串:
- 至少有一个字符不是空白字符
- 至少一个空白字符
- 你要找的号码
- 至少一个空白字符
- 至少有一个字符不是空白字符
使用扩展正则表达式。如果您明确排除了允许您在PHP中逐行读取文件的选项,那么您可能仅限于使用操作系统搜索命令,如grep。。。。但是为什么不想使用循环呢?这可能会有帮助
我不想使用while和foreach,因为txt文件中有大量的行。这对我来说似乎是错误的,当你有大文件时,你希望每行都这样做,否则你会陷入内存问题。。。。也不是真正基于php的解决方案。@MarcinOrlowski shell_exec命令在php中使用……所以这是基于php的解决方案:)