2013-09-21 3 views
0

У меня есть строка, $data = "Name Email ID DOB, Name Email ID DOB, Name Email ID DOB, etc." (с действительным именем, электронный идентификатор и данные DOB)Найти символ в строке перед положением PHP

Я хочу, чтобы извлечь только один из этих наборов значений из строки на основе идентификатора. Так что я хочу использовать strpos(ID), чтобы получить позицию идентификатора в строке, но затем я хочу извлечь подстроку, которая начинается с первой запятой перед идентификатором, и заканчивается в первой запятой после нее.

Например, $data = "John Doe [email protected] 123 1/01/91, Mary Doe [email protected] 124 1/02/82, Jack Doe [email protected] 125 1/05/67";. У меня есть $id = 124;, поэтому я хочу получить подстроку $substr = "Mary Doe [email protected] 124 1/02/82";

Что было бы лучшим способом сделать это в PHP?

ответ

1

Просто быть разными, вы можете также использовать str_getcsv() вместо explode():

<?php 
$data = "John Doe [email protected] 123 1/01/91, Mary Doe [email protected] 124 1/02/82, Jack Doe [email protected] 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 [email protected] 124 1/02/82 
5

я предлагаю вам искать алгоритм здесь:

  1. Разделить исходную строку с помощью запятой и получить массив лексем
  2. Loop через массив и найти элемент массива с совпадающими ID
+1

Я предпочитаю это решение, если честно. +1 –

+1

Вы печатаете быстрее или короче, чем я :-) – TecBrat

1

Вы можете использовать регулярное выражение, которое будет соответствовать как можно большему количеству символов не запятой вокруг вашего идентификатора. Один символ без запятой может быть сопоставлен с [^,].

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

Обратите внимание, что если $id может содержать другие символы, чем просто цифры, конкатенации его в регулярное выражение может быть опасным. В этом случае вместо этого используйте preg_quote($id, '/') (что позволит избежать любых метасимволов).

1

если вы знаете первый идентификатор и идентификатор, который вы ищете.

Просто $result = explode("," $data);

вычтем идентификатор, который вы ищете, и первый идентификатор.

$index = $idSearch - $FirstId; 

После вынимания $result[$index];

0

я, наверное, explode (сплит) строка в массив на запятую, а затем запустить массив через foreach, взрываются каждый элемент на пространствах и в то же время проверки вновь созданный вспомогательный массив для этого конкретного идентификатора.

Но вы, вероятно, лучше с другим способом хранения этих данных. (например, DB)

0

use explode(), чтобы преобразовать строку в массив, а затем просто пропустить этот массив и сопоставить идентификатор с элементом массива. Я надеюсь, что это позволит решить проблему

Смежные вопросы