我有一个字符串$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中执行此操作的最佳方式是什么?
答案 0 :(得分:5)
我在这里为您提供搜索算法:
答案 1 :(得分:1)
您可以使用正则表达式,该ID与您的ID周围尽可能多的非逗号字符匹配。单个非逗号字符可与[^,]
匹配。
preg_match('/[^,]* '.$id.' [^,]*/', $input, $match);
// your result will be in $match[0]
请注意,如果$id
可以包含除数字之外的其他字符,则将其连接到正则表达式可能会很危险。在这种情况下,请使用preg_quote($id, '/')
代替(这将转义任何元字符)。
答案 2 :(得分:1)
如果您知道您搜索的第一个ID和ID。
只需$result = explode("," $data);
并减去您搜索的ID和第一个ID。
$index = $idSearch - $FirstId;
取$result[$index];
答案 3 :(得分:1)
为了与众不同,您还可以使用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
答案 4 :(得分:0)
我可能将explode
(拆分)字符串放到逗号上的数组中,然后通过foreach
运行数组,爆炸空间上的每个元素,同时检查新创建的子该特定id的数组。
但是,你可能会以不同的方式存储这些数据。 (像数据库)
答案 5 :(得分:0)
使用explode()将字符串转换为数组然后简单地遍历该数组并将id与数组元素匹配。我希望这能解决你的问题