PHP:Find from制表符分隔的文本文件,不带while循环

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

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

范例

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的解决方案:)