我有一个字符串,$data = "Name Email ID DOB, Name Email ID DOB, Name Email ID DOB, etc."
(带有实际姓名,电子邮件ID和DOB数据)
我只想根据 ID 从字符串中提取这些值集之一。所以我要做的是使用 strpos(ID)
来获取 ID 在字符串中的位置,但随后我想提取一个子字符串,该子字符串从 ID 之前的第一个逗号开始,到它之后的第一个逗号结束。
例如,$data = "John Doe j@d.com 123 1/01/91, Mary Doe m@d.com 124 1/02/82, Jack Doe ja@d.com 125 1/05/67";
.我有$id = 124;
,所以我想得到一个子字符串$substr = "Mary Doe m@d.com 124 1/02/82";
在 PHP 中执行此操作的最佳方法是什么?
我在这里为您提供搜索算法:
- 使用逗号拆分原始字符串并获取标记数组
- 遍历数组并查找具有匹配 ID 的数组元素
为了与众不同,你也可以使用 str_getcsv()
而不是 explode()
:
<?php
$data = "John Doe j@d.com 123 1/01/91, Mary Doe m@d.com 124 1/02/82, Jack Doe ja@d.com 125 1/05/67";
$records = str_getcsv($data);
foreach ($records as $record) {
$fields = str_getcsv($record, ' ');
if ($fields[4] == 124) {
echo $record, "'n";
break;
}
}
输出:
Mary Doe m@d.com 124 1/02/82
您可以使用正则表达式,它只匹配尽可能多的非逗号字符。单个非逗号字符可以与 [^,]
匹配。
preg_match('/[^,]* '.$id.' [^,]*/', $input, $match);
// your result will be in $match[0]
请注意,如果$id
可以包含数字以外的其他字符,则将其连接成正则表达式可能会很危险。在这种情况下,请改用preg_quote($id, '/')
(这将转义任何元字符)。
如果您知道第一个ID和要搜索的ID。
只是$result = explode("," $data);
并减去您搜索的 ID 和第一个 ID。
$index = $idSearch - $FirstId;
服用$result[$index];
后
我可能会explode
(拆分)逗号上的字符串成一个数组,然后通过foreach
运行数组,在空格上爆炸每个元素,同时检查新创建的子数组中是否有该特定 id。
但是,您可能最好使用不同的方法来存储此数据。(如数据库)
使用 explode() 将字符串转换为数组,然后简单地遍历该数组并将 id 与数组元素匹配。我希望这能解决您的问题