php从数组中取消键,哪些键与preg_match fucntion匹配

时间:2015-07-01 10:45:13

标签: php arrays session

我正在$_SESSION上存储用户登录详细信息,现在我正在尝试仅删除以fb_开头的会话(这是facebook会话数据)。

获取此数组输出:

Array
(
    [sproperty] => for sale
    [scommercial] => 0
    [previousURL] => http://192.168.1.233/propio/public/assets/img/progress.gif
    [fb_681840795262337_code] => AQDktd4q_QhpGKAYVyf6eKLtuWvwsc7c8ssXzmA0abvT4XhvAjy2ySTk969-HXSTyCNO0pWY0utwDixxBOpF6n6-YMrKed0wr2c3lBReY85CgH7rg06hqTHeJnv04uextP48m2v7D1se32ogqIfxbtsbmI8eX8xkoLugjCTljKwdCS9GYGkPCjOQyePoS_b62fV9Wfz7BH_70EAW2Y9TjjbmIyXYyTYBkhWQ9cUH9vGMYV9wnPda_v0jxQnb3p043qGQ4bT3DEb82Qohkvs_ktt1vepIf_859DrMgWKfT7B5WyDM9fFk4Azp_SfJc6_mjaoCcdIUmncQGNePJYS7-0lN
    [fb_681840795262337_access_token] => CAAJsIW5lHYEBAKa7YSrgokZC9lS2ZCFBeRLzD5VhTONIJeG1hkPU1wfRAZAaIf29ofBtldeFeteZAs2z3Mz3nRCoJsw3AuZCZBEHWAnBrsZCV5crMgjUjebmTP3FzoOEG0o02u4bopI8OJgY3kKCXU5bTeeKfPQ6kNAyStl8ehlZCOIhcQgkZAIOfvoNTk62N5wsfZCxsswlPt7EX0IoZA0Gkd2
    [fb_681840795262337_user_id] => 1375895206037186
    [success] => Login successfully
)

我创建了波纹管功能,只有当用户点击logout按钮时才会调用。

public function logout(){

    // Unset facebook session data
    $readSession = $_SESSION;
    foreach($readSession as $key => $value) {
      if(preg_match('/fb_(.*)/s', $key)) {
        unset($readSession[$key]);
      }
    }

}

在这个函数中,我写了unset code来清除facebook键(名称以fb_开头)但是unset在我的数组中不起作用。我仍然从阵列中获取所有密钥。

任何想法。为什么它不起作用或我做错了什么?

感谢。

1 个答案:

答案 0 :(得分:3)

问题是您没有直接修改$_SESSION数组。相反,您只是更改您创建的副本。只需取消$_SESSION中的变量即可将其正确删除。

public function logout(){

    // Unset facebook session data
    foreach($_SESSION as $key => $value) {
      if(preg_match('/fb_(.*)/s', $key)) {
        unset($_SESSION[$key]);
      }
    }

}

另外,你不需要正则表达式。只需使用strpos即可获得相同的结果。另外,这比在as Rizier123 points out找到'fb_'的正则表达式更好,因为{{3}}你忘记了字符串锚点的开始(^)。

public function logout(){

    // Unset facebook session data
    foreach($_SESSION as $key => $value) {
      if(strpos($key, 'fb_') === 0) {
        unset($_SESSION[$key]);
      }
    }

}