所以我的.txt中有一堆数据以这种格式
order_number
first_name
last_name
email_address
如果我搜索示例john_doe
(必须john_doe
完全没有john_do
),我试图弄清楚如何制作它
它从john_doe
抓取.txt
并显示order_number
first_name
(在这种情况下为john_doe
)last_name
email_address
。
我不知道如何,我看了preg_match
,但这并没有成功。如果有人能帮助我,那将是值得赞赏的。
请求示例:
"28DP9", "JOHAN", "VAN DIJK", "removed@gmail.com"
答案 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
)
)