0

我有一个字符串,$data = "Name Email ID DOB, Name Email ID DOB, Name Email ID DOB, etc."(带有实际姓名、电子邮件 ID 和出生日期数据)

我想根据 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 中执行此操作的最佳方法是什么?

4

6 回答 6

5

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

  1. 使用逗号拆分原始字符串并获取令牌数组
  2. 遍历数组,找到匹配ID的数组元素
于 2013-09-21T12:07:20.763 回答
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
于 2013-09-21T12:33:11.113 回答
1

您可以使用正则表达式,它尽可能多地匹配您的 ID 周围的非逗号字符。单个非逗号字符可以与 . 匹配[^,]

preg_match('/[^,]* '.$id.' [^,]*/', $input, $match);
// your result will be in $match[0]

请注意,如果$id可以包含除数字以外的其他字符,则将其连接到正则表达式中可能很危险。在这种情况下,请preg_quote($id, '/')改用(这将转义任何元字符)。

于 2013-09-21T12:07:23.543 回答
1

如果您知道第一个 id 和您搜索的 id。

只是$result = explode("," $data);

并减去您搜索的 id 和第一个 id。

$index = $idSearch - $FirstId;

你拿了之后$result[$index];

于 2013-09-21T12:07:59.730 回答
0

使用 explode() 将字符串转换为数组,然后简单地循环遍历该数组并将 id 与数组元素匹配。我希望这能解决你的问题

于 2013-09-21T12:16:39.437 回答
0

我可能explode会将字符串(拆分)为逗号上的数组,然后通过 a 运行数组foreach,在空格上爆炸每个元素,同时检查新创建的子数组以获取该特定 ID。

但是,使用不同的方式存储这些数据可能会更好。(就像一个数据库)

于 2013-09-21T12:11:47.427 回答