1

我有一个包含以下字符串的会话变量。

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; 

它变得更丑了……不得不删除引号。

if ($_SESSION["SecurityAccess_CustomerAccess"]){    
    $session_data = unserialize($_SESSION["SecurityAccess_CustomerAccess"]);
    $session_user_array = explode(';', $_SESSION["SecurityAccess_CustomerAccess"]);
    $temp = $session_user_array[3]; 
    $temp = explode(':', $temp);
    $temp = str_replace("\"", "", $temp[2]);
    $username = $temp;
      echo  $username ; 
}
4

3 回答 3

8

这就是你所需要的:

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

您的会话数据是以序列化形式存储的数组,因此反序列化会将其转换回常规 PHP 数组。

于 2010-07-14T22:27:47.980 回答
0

如果数据总是以类似的方式形成,我建议使用正则表达式。

preg_match('/"Username";s:\d+:"(\w*)"/',$session_data,$matches);
echo $matches[1];
于 2010-07-14T22:27:59.997 回答
0

如果这些值的位置始终相同,您可能可以编写某种类型的正则表达式来帮助解决其中的一些问题。但我认为你在这里拥有的东西对可读性很有帮助。如果有人追随你,他们会对你想要达到的目标有一个很好的了解。像这样的字符串的正则表达式可能不会产生相同的效果。

于 2010-07-14T22:28:17.640 回答