php извлекает значение из строки - PullRequest
1 голос
/ 15 июля 2010

У меня есть переменная сеанса, которая содержит следующую строку.

a:2:{s:7:"LoginId";s:32:"361aaeebef992bd8b57cbf390dcb3e8d";s:8:"Username";s:6:"aaaaaa";}

Я хочу извлечь значение имени пользователя "aaaaaa".Кто-нибудь может предложить более простой / более эффективный способ?

$session_data = unserialize($_SESSION["SecurityAccess_CustomerAccess"]);
$session_user_array = explode(';', $_SESSION["SecurityAccess_CustomerAccess"]);
$temp = $session_user_array[3]; 
$temp = explode(':', $temp);
$username = $temp[2];
echo $username; 

Это стало еще уродливее ... пришлось удалить цитаты.

Ответы [ 3 ]

9 голосов
/ 15 июля 2010

Это все, что вам нужно:

$session_data = unserialize($_SESSION["SecurityAccess_CustomerAccess"]);
echo $session_data['Username'];

Данные вашего сеанса - это массив, хранящийся в сериализованной форме, поэтому при десериализации он снова превращается в обычный массив PHP.

1 голос
/ 15 июля 2010

Возможно, вы могли бы написать какой-то тип регулярного выражения, чтобы помочь с этим, если бы размещение этих значений всегда было одинаковым. Но я думаю, что то, что у вас есть, отлично подходит для читабельности. Если кто-нибудь придет за вами, он будет иметь хорошее представление о том, чего вы пытаетесь достичь. Регулярное выражение для такой строки, вероятно, не будет иметь такого же эффекта.

1 голос
/ 15 июля 2010

Если данные всегда будут формироваться одинаковым образом, я бы предложил использовать регулярное выражение.

preg_match('/"Username";s:\d+:"(\w*)"/',$session_data,$matches);
echo $matches[1];
...