在PHP中,将此字符串解析为关联数组的最有效方法是什么?解析此字符串的最佳方法
%STCITY^LASTNAME$FIRSTNAME$MIDDLENAME^ADDRESS1$ADDRESS2^?;UNIQUEID=YYMMDDYYMMDD=?
在PHP中,将此字符串解析为关联数组的最有效方法是什么?解析此字符串的最佳方法
%STCITY^LASTNAME$FIRSTNAME$MIDDLENAME^ADDRESS1$ADDRESS2^?;UNIQUEID=YYMMDDYYMMDD=?
类似伊戈尔:
$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',
)
正如你所看到的,它具有基于命名组(字符串键以及数字)。
这是一个很好的答案!有没有办法让它没有数字? – muncherelli 2010-09-17 01:29:59
我不知道一种不设置数字的方法。你可以删除它们,但这可能没有意义。 – 2010-09-17 01:43:15
是的,当我将输出格式化为新阵列时,我只是将它们删除了。再次感谢! – muncherelli 2010-09-17 01:46:22
注意*最后两个YYMMDD是两个不同的日期,用户的到期日和他们的生日 – muncherelli 2010-09-17 00:43:27
关联数组应该是什么样子? – Matthew 2010-09-17 00:43:34
最有效的方法是使用preg_match_all(http://www.php.net/manual/en/function.preg-match-all.php),您只需要找到正确的模式并将其作为输出所需的阵列。 – Igor 2010-09-17 00:48:17