如何通过包含数千个数字的文件搜索确切的数字?

时间:2011-05-12 13:49:17

标签: php

如果我们说我们有一个包含订单号或引用的文本文件(每1行1个数字),那么查找/验证输入(例如在表单中输入的数字)对文件中这些数字的最佳方法是什么?

有一个简单的想法吗?假设我们有数千个数字可以搜索。

非常感谢。

4 个答案:

答案 0 :(得分:2)

如果内存不是问题(Demo):

if (in_array($number, file('numbers.txt', FILE_IGNORE_NEW_LINES))) {
    // number exists - do something
}

由于file返回一个数组,其中每一行是数组中的一个元素,您也可以使用array_search查找找到它的行,或array_keys查找所有行它被发现的地方。

如果内存有问题(Demo):

foreach(new SplFileObject('numbers.txt') as $line) {
    if ($number == $line) {
        // number exists - do something
        break;
    }
}

当怀疑使用时,基准。

标记CW,因为已经有几个问题询问如何read a file line by lineefficiently

答案 1 :(得分:0)

$file = file_get_contents("filename.txt");
if (strpos($file, "search string") === false) {
    echo "String not found!";
}

答案 2 :(得分:0)

如果要返回文件中匹配数字位置的行号,可以使用file()将参考文件作为文件行数组返回。

$search_string = '42';
$file_name = 'test_file.txt';
$file = file($file_name);

foreach($file as $line_number=>$number){

if(intval($search_string) == $number){
    $found_on_lines[] = $line_number;
}
}

echo "String ".$search_string;

if(count($found_on_lines)>0){
echo " found on line(s):</br> ";
foreach($found_on_lines as $line){
    echo $line."</br>";
}
}
else{
echo  "not found in file ".$file_name.".";
}

这将输出

  

在线上找到字符串42:
  9
  256

如果你的参考文件在第9行和第256行包含数字'42'。

答案 3 :(得分:0)

如果订购号码:请勿将整个文件加载到内存中。寻找文件的中间并读取数字。如果你的号码是&lt;比中间,寻找上半场的中间。否则寻求下半场的中间......

Binary Search