Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php从字符串中提取值_Php_Explode - Fatal编程技术网

php从字符串中提取值

php从字符串中提取值,php,explode,Php,Explode,我有一个会话变量,它包含以下字符串 a:2:{s:7:"LoginId";s:32:"361aaeebef992bd8b57cbf390dcb3e8d";s:8:"Username";s:6:"aaaaaa";} 我想提取用户名“aaaaa”的值。有人能建议更简单/更有效的方式吗 $session_data = unserialize($_SESSION["SecurityAccess_CustomerAccess"]); $session_user_array = explode(';',

我有一个会话变量,它包含以下字符串

a:2:{s:7:"LoginId";s:32:"361aaeebef992bd8b57cbf390dcb3e8d";s:8:"Username";s:6:"aaaaaa";}
我想提取用户名“aaaaa”的值。有人能建议更简单/更有效的方式吗

$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 ; 
}
这就是您所需要的:

$session_data = unserialize($_SESSION["SecurityAccess_CustomerAccess"]);
echo $session_data['Username'];
您的会话数据是一个以表单形式存储的数组,因此取消序列化会将其转换回常规PHP数组。

这就是您所需要的:

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

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

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

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

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

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

如果这些值的位置总是相同的,您可能会编写某种类型的正则表达式来帮助实现这些功能。但我认为你们这里的内容对可读性很好。如果有人来找你,他们会很清楚你想要实现什么。类似这样的字符串的正则表达式可能不会有相同的效果。

如果这些值的位置始终相同,您可能可以编写某种类型的正则表达式来帮助实现这些效果。但我认为你们这里的内容对可读性很好。如果有人来找你,他们会很清楚你想要实现什么。类似这样的字符串的正则表达式可能不会有相同的效果。

但是,如果参数不总是按此顺序排列,则需要/“Username”;s:\d+:“(.*)”/是一个有效但错误的解决方案。非序列化是正确的方法。但是,如果参数不总是按顺序排列,则需要/“Username”;s:\d+:“(.*)”/是一个有效但错误的解决方案。非工业化是正确的道路。富于智慧!必须阅读字符串和数组上的800页!他妈的太棒了!必须阅读字符串和数组上的800页!