如何使用 PHP 在文本文件中搜索一定数量的字母



我有一个很大的文本文件,上面有很多人的姓名、地点和出生日期。我需要根据字符大小查找名称。我怎样才能用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.
    }
}

相关内容

  • 没有找到相关文章

最新更新