在位置 PHP 之前查找字符串中的字符


Find character in string before position PHP

我有一个字符串,$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 中执行此操作的最佳方法是什么?

我在这里为您提供搜索算法:

  1. 使用逗号拆分原始字符串并获取标记数组
  2. 遍历数组并查找具有匹配 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 与数组元素匹配。我希望这能解决您的问题