我有一个包含以下字符串的会话变量。
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 ;
}
答案 0 :(得分:9)
这就是你所需要的:
$session_data = unserialize($_SESSION["SecurityAccess_CustomerAccess"]);
echo $session_data['Username'];
您的会话数据是以serialized形式存储的数组,因此反序列化会将其转换回常规PHP数组。
答案 1 :(得分:1)
如果数据总是以类似的方式形成,我建议使用正则表达式。
preg_match('/"Username";s:\d+:"(\w*)"/',$session_data,$matches);
echo $matches[1];
答案 2 :(得分:1)
如果这些值的位置始终相同,您可以编写某种类型的正则表达式来帮助解决其中的一些问题。但我认为你在这里有很好的可读性。如果有人跟着你,他们会很清楚你想要达到的目标。像这样的字符串的正则表达式可能不会产生相同的效果。