在PHP中获取包含特定字符串的每一行

3

我正在尝试从一个文本文件中读取每一行,并返回包含特定字符串的所有行。在这个例子中,我要查找 "1992"。

alt.txt

1223 abcd
1992 dcba
1992 asda

file.php

function getLineWithString($fileName, $str) {
    $lines = file($fileName);
    foreach ($lines as $lineNumber => $line) {
        if (strpos($line, $str) !== false) {
            return $line;
        }
    }
    return -1;
}

当我运行php代码时,返回的结果是"1992 dcba",而我需要得到一个数组,每个元素对应一行。例如$line[0]应该是"1992 dcba",$line[1]应该是"1992 asda"。请问如何实现这个功能?


你已经得到了答案。$lines 实际上就是那个数组。 - DarkBee
3个回答

4

另一种方法是使用preg_grep

$lines = file('alt.txt');
$results = preg_grep("/1992/", $lines);

preg_grep函数将保留返回数组中的原始键。如果您不想这样做,请添加以下内容以重新索引返回数组。

$results = array_values($results);

3
构建一个包含所有有效结果的数组并返回,而不仅仅是返回第一个结果。
function getLineWithString($fileName, $str) {
    $results = array();
    $lines = file($fileName);
    foreach ($lines as $lineNumber => $line) {
        if (strpos($line, $str) !== false) {
            $results[] = $line;
        }
    }
    return $results;
}

1
谢谢。我现在如何在使用该函数时获取数组中的第二个元素?我尝试过使用getLineWithString('alt.txt', $match_id)[1],但是这只会导致出现一个意外的[错误。 - Choops
要使用数组解引用,就像你的评论所要求的那样,你需要 PHP 5.4 或更高版本(无论如何,你真的应该这样做,因为所有早期版本都不受支持)。 - Mark Baker

3

您目前正在执行的操作是在找到特定字符串后立即返回。您需要做的是将该行放入数组中并返回该数组。因此,您将获得以下结果:

function getLineWithString($fileName, $str) {
    $lines = file($fileName);
    $returnLines = array();

    foreach ($lines as $lineNumber => $line) {
        if (strpos($line, $str) !== false) {
            $returnLines[] = $line;
        }
    }
    return count($returnLines) > 0 ? $returnLines : -1;
} 

我在返回语句中添加了一行单行if语句,这样如果没有添加任何内容,你仍然会返回-1。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接