2010-09-17 3 views
0

В PHP какой самый эффективный способ проанализировать эту строку в ассоциативном массиве?Лучший способ разобрать эту строку

%STCITY^LASTNAME$FIRSTNAME$MIDDLENAME^ADDRESS1$ADDRESS2^?;UNIQUEID=YYMMDDYYMMDD=? 
+0

примечание * последние два YYMMDD - две разные даты, день истечения срока действия пользователя и их день рождения – muncherelli

+1

. Каким должен быть связанный массив? – Matthew

+2

наиболее эффективным способом является использование preg_match_all (http://www.php.net/manual/en/function.preg-match-all.php), вам просто нужно найти правильный шаблон и как результат, который вы получите желаемый массив. – Igor

ответ

3

Подобно Игорю:

$regex = '/%(?<State>..)(?<City>[^^]*)\^(?<LastName>[^$]*)\$(?<FirstName>[^$]*)\$(?<MiddleName>[^^]*)\^(?<Address1>[^$]*)\$(?<Address2>[^^]*)\^\?;(?<UniqueId>[^=]*)=(?<Expiration>.{6})(?<Birthday>.{6})=/'; 
preg_match($regex, $str, $matches); 

Если вы запустите пример:

array (     
    0 => '%STCITY^LASTNAME$FIRSTNAME$MIDDLENAME^ADDRESS1$ADDRESS2^?;UNIQUEID=YYMMDDYYMMDD=', 
    'State' => 'ST',                   
    1 => 'ST',                    
    'City' => 'CITY',                  
    2 => 'CITY',                    
    'LastName' => 'LASTNAME',                
    3 => 'LASTNAME',                   
    'FirstName' => 'FIRSTNAME', 
    4 => 'FIRSTNAME', 
    'MiddleName' => 'MIDDLENAME', 
    5 => 'MIDDLENAME', 
    'Address1' => 'ADDRESS1', 
    6 => 'ADDRESS1', 
    'Address2' => 'ADDRESS2', 
    7 => 'ADDRESS2', 
    'UniqueId' => 'UNIQUEID', 
    8 => 'UNIQUEID', 
    'Expiration' => 'YYMMDD', 
    9 => 'YYMMDD', 
    'Birthday' => 'YYMMDD', 
    10 => 'YYMMDD', 
) 

Как вы можете видеть, он имеет строковые ключи на основе названных групп (а также числовые).

+0

Это отличный ответ! Есть ли способ сделать это без числового? – muncherelli

+0

Я не знаю, как не устанавливать числа. Вы можете удалить их, но это, вероятно, бессмысленно. –

+0

Да, я просто удалил их, когда отформатировал вывод в новый массив. Еще раз спасибо! – muncherelli