我有一个很大的文本文件,上面有很多人的姓名、地点和出生日期。我需要根据字符大小查找名称。我怎样才能用PHP做到这一点?
在文本文件中,数据组织方式如下:
Name-Location ID DOB
Bob-LA 110 12/01/1987
Lia-CA 111 11/09/1984
Neil-LA 112 17/10/1982
Emon-CA 113 07/12/1991
Elita-CA 113 13/06/1983
Ron-CA 114 16/02/1979
and so on
现在我想搜索具有特定角色名称和相同位置的人(假设我希望找到所有名字有 4 个字母并且来自 CA [Emon-CA] 的人)。我该怎么做?我通常可以使用PHP搜索文件,我知道我正在寻找的字符串。但在这里,我实际上不知道如何设置条件以显示我想要的结果。有人可以帮我吗?提前谢谢。
你可以
试试
$filename = "log.txt";
foreach ( new TextFileFilterIterator($filename) as $line ) {
list($name, $location, $id, $dob) = $line;
if (strlen($name) == 4 && $location == "CA") {
echo implode(",", $line), PHP_EOL;
}
}
输出
Emon,CA,113,07/12/1991
使用的类
class TextFileFilterIterator extends ArrayIterator {
private $filter;
function __construct($filename) {
parent::__construct(array_filter(array_map("trim", file($filename))));
}
public function current() {
$c = array_filter(explode(" ", parent::current()));
list($n, $l) = explode("-", array_shift($c));
array_unshift($c, $n, $l);
return array_map("trim", $c);
}
}
我建议使用正则表达式,如下所示:
// assume $text contains the contents of your text file
$namelength = 4; // change this as needed
$location = 'CA'; // again, change as needed
如果您只想计算结果
$count = preg_match_all('|^s*([w]{'.$namelength.'})-'.$location.'s*(d+)s*(d{2}/d{2}/d{4})$|',$text,$matches);
否则,如果要对每个匹配项执行某些操作:
if(preg_match_all('|^s*([w]{'.$namelength.'})-'.$location.'s*(d+)s*(d{2}/d{2}/d{4})$|',$text,$matches)){
foreach($matches as $match){
$name = $match[1];
$id = $match[3];
$dob = $match[4];
// Do something with each name.
}
}