在 session 保存处理程序的写入函数中,$data 以如下格式传递:
test|a:1:{s:3:"foo";s:3:"bar";}session|a:2:{s:10:"isLoggedIn";b:1;s:8:"clientId";s:5:"12345 ";}
有没有办法将其转换为正确的数组:
array
(
'test' => array
(
'foo' => 'bar'
)
'session' => array
(
'isLoggedIn' => true
'clientId' => '12345'
)
)
我尝试将其传递给反序列化,但出现以下错误:
unserialize() [function.unserialize]: Error at offset 0 of 95 bytes
它只返回 false。
最佳答案
关于另一个答案。 session_decode 的描述是“session_decode() 解码数据中的 session 数据,设置存储在 session 中的变量。”这听起来不像是你需要的......而且它总是在解析字符串后返回 bool。
另一方面,如果您作为示例提供的字符串有错误,“12345”之后的空格(看起来像错误,因为在它前面您可以看到以下值应该是一个字符串长度 5) 你可以使用这个函数:
function unserialize_session_data( $serialized_string )
{
$variables = array();
$a = preg_split( "/(\w+)\|/", $serialized_string, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE );
for( $i = 0; $i<count($a); $i = $i+2 )
{
if(isset($a[$i+1]))
{
$variables[$a[$i]] = unserialize( $a[$i+1] );
}
}
return( $variables );
}
关于php - 将 session $data 转换为数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8446385/