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 に答える