2010-09-17 56 views
0

在PHP中,將此字符串解析爲關聯數組的最有效方法是什麼?解析此字符串的最佳方法

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

注意*最後兩個YYMMDD是兩個不同的日期,用戶的到期日和他們的生日 – muncherelli 2010-09-17 00:43:27

+1

關聯數組應該是什麼樣子? – Matthew 2010-09-17 00:43:34

+2

最有效的方法是使用preg_match_all(http://www.php.net/manual/en/function.preg-match-all.php),您只需要找到正確的模式並將其作爲輸出所需的陣列。 – Igor 2010-09-17 00:48:17

回答

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 2010-09-17 01:29:59

+0

我不知道一種不設置數字的方法。你可以刪除它們,但這可能沒有意義。 – 2010-09-17 01:43:15

+0

是的,當我將輸出格式化爲新陣列時,我只是將它們刪除了。再次感謝! – muncherelli 2010-09-17 01:46:22

相關問題