PHP:从制表符分隔的文本文件中查找而不使用while循环

时间:2014-05-30 13:47:18

标签: php

我有一个制表符分隔的文本文件(TXT),其中包含超过 100万行(记录)和 400 MB 文件大小

实施例

demo    123333    new
demo2    3444442    new
demo4    56666632    old
demo5    455552333   new

所以现在我想找出哪些第二个标签等于“56666632”

还将该行隐藏的所有制表符值转换为数组,如:

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;
  }
}

2 个答案:

答案 0 :(得分:1)

如果你在Linux机器上,可以尝试将作业委托给grep:

$line = shell_exec('grep -P "\t56666632\t" feed.txt');

答案 1 :(得分:0)

如果没有foreachwhile循环,您将很难做到这一点。事实上,这很难,我甚至不会浪费时间寻找答案

如果您使用的是类似Unix的计算机,请使用grep

grep -nE \
  '^[^[:space:]]+[[:space:]]+56666632[[:space:]]+[^[:space:]]+' \
  feed.txt \
  | awk -F: '{print $1}'

正则表达式将搜索包含以下内容的字符串:

  • 至少一个不是空白字符的字符
  • 至少一个空格字符
  • 您之后的号码
  • 至少一个空格字符
  • 至少一个不是空白字符的字符

使用扩展正则表达式。