PHP获取行匹配短语TXT文件

时间:2016-06-06 22:31:44

标签: php file search

所以我的.txt中有一堆数据以这种格式

order_number
first_name
last_name
email_address

如果我搜索示例john_doe(必须john_doe完全没有john_do),我试图弄清楚如何制作它 它从john_doe抓取.txt并显示order_number first_name(在这种情况下为john_doelast_name email_address

我不知道如何,我看了preg_match,但这并没有成功。如果有人能帮助我,那将是值得赞赏的。

请求示例:

"28DP9", "JOHAN", "VAN DIJK", "removed@gmail.com"

1 个答案:

答案 0 :(得分:0)

您似乎将其存储为“逗号分隔值”(CSV)。您需要获取此数据,对其进行排序并进行搜索。以下列数据为例:

"28DP9", "JOHAN", "VAN DIJK", "removed@gmail.com"
"28DP9", "JOHAN", "VAN DIJK", "removed@gmail.com"
"28DP9", "JOHAN", "VAN DIJK", "removed@gmail.com"
"28DP9", "john_doe", "VAN DIJK", "IAM_john_doe@gmail.com"
"28DP9", "JOHAN", "VAN DIJK", "removed@gmail.com"
"28DP9", "JOHAN", "VAN DIJK", "removed@gmail.com"

现在我们想找到一行( john_doe ),我们需要的是先将数据排序到一个关联数组中。这只是通过explode() / foreach()

的组合完成的
$new = array();
$data_array = explode("\n", $data);
foreach($data_array as $element) {
    list($order_number, $first, $last, $email) = explode(",", str_replace('"', '',$element));
    $new[] = array(
        'order_number' => $order_number,
        'first_name' => $first,
        'last_name' => $last,
        'email' => $email,
    );
}

参考:$data是您文件中的数据(很可能是从file_get_contents()获取的)。我们还会从数据中删除所有",因为我们不需要它。这是通过str_replace()

完成的

现在我们已经对它进行了排序,我们需要进行搜索。这是通过array_map() / array_filter()

的组合完成的
$search_word = 'john_doe';

$found = array_filter(array_map(function($element) use ($search_word){
    if(trim($element['first_name']) == $search_word) {
        return $element; 
    }
}, $new));

上面的搜索遍历每个元素(基本上是一个美化的foreach()循环。)并且只返回具有您需要的搜索词的元素。因此,搜索从示例中返回以下内容:

Array
(
    [3] => Array
        (
            [order_number] => 28DP9
            [first_name] =>  john_doe
            [last_name] =>  VAN DIJK
            [email] =>  IAM_john_doe@gmail.com
        )

)

Example/Demo