如果我们说我们有一个包含订单号或引用的文本文件(每1行1个数字),那么查找/验证输入(例如在表单中输入的数字)对文件中这些数字的最佳方法是什么?
有一个简单的想法吗?假设我们有数千个数字可以搜索。
非常感谢。
答案 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 line或efficiently。
答案 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;比中间,寻找上半场的中间。否则寻求下半场的中间......