0

文字列があります$data = "Name Email ID DOB, Name Email ID DOB, Name Email ID DOB, etc."(実際の名前、電子メール ID、DOB データを含む)

ID に基づいて文字列からこれらの値のセットの 1 つだけを抽出したいと考えています。だから私がしたい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

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 に答える
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 に答える
0

おそらくexplode、文字列をコンマの配列に (分割) してから、配列を で実行し、foreach各要素をスペースで展開し、同時に、新しく作成されたサブ配列でその特定の ID を確認します。

ただし、このデータを別の方法で保存する方がよいでしょう。(DBのように)

于 2013-09-21T12:11:47.427 に答える
0

爆発()を使用して文字列を配列に変換し、その配列をループして、IDを配列要素と一致させます。これで問題が解決することを願っています

于 2013-09-21T12:16:39.437 に答える