В 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
Я не знаю, как не устанавливать числа. Вы можете удалить их, но это, вероятно, бессмысленно. –
Да, я просто удалил их, когда отформатировал вывод в новый массив. Еще раз спасибо! – muncherelli
примечание * последние два YYMMDD - две разные даты, день истечения срока действия пользователя и их день рождения – muncherelli
. Каким должен быть связанный массив? – Matthew
наиболее эффективным способом является использование preg_match_all (http://www.php.net/manual/en/function.preg-match-all.php), вам просто нужно найти правильный шаблон и как результат, который вы получите желаемый массив. – Igor