PHP在前面用'tmp'取消所有变量

时间:2011-09-27 11:48:13

标签: php loops foreach session-variables

我只是想循环遍历所有当前会话变量,如果会话变量名称以'tmp'开头,那么我想取消设置变量。

我会这样做:

foreach($session as $sv){
    if(substr($sv,0,3)=='tmp'){
        unset($sv);
    }
}

只是不确定如何将所有当前会话变量放入数组中以开始。

提前致谢!

6 个答案:

答案 0 :(得分:1)

$_SESSION包含每个会话变量

foreach(array_keys($_SESSION) as $sv){
    if(substr($sv, 0, 3) === 'tmp'){
        unset($_SESSION[$sv]);
    }
}

是正确的

答案 1 :(得分:1)

只需使用$_SESSION

即可

答案 2 :(得分:1)

有什么问题
foreach (array_keys($_SESSION) as $key) {
    if (substr($key,0,3) == 'tmp') {
        unset($_SESSION[$key]);
    }
}

答案 3 :(得分:1)

使用合适的示例解决方案

<?php session_start();
$_SESSION['var1']='var 1 value';
$_SESSION['var2']='var 2 value';
$_SESSION['var3']='var 3 value';

$_SESSION['tmpvar1']='tmp var 1 value';
$_SESSION['tmpvar2']='tmp var 2 value';
$_SESSION['tmpvar3']='tmp var 3 value';

print_r($_SESSION);

foreach($_SESSION as $key=>$value)
{
    if(substr($key,0,3)=='tmp'){
        unset($_SESSION[$key]);
    }
}
print_r($_SESSION);
?>

答案 4 :(得分:1)

如果您实际上尝试使用session来设置未设置的变量,则会循环遍历$_SESSION

如果session variables表示“在当前脚本范围内声明的所有变量”,则会遍历全局范围内所有变量的$GLOBALSget_defined_vars()的结果对于当前范围内的所有变量,例如当前功能的范围。

您必须实际执行循环并取消设置变量的代码是正确的。

答案 5 :(得分:1)

会话本身是一个大数组,数组数组等...所以你需要做一些递归函数来搜索所有级别($ _SESSION [“a”]可以是一个内部有一些临时数的数组$ _SESSION [“a”] [“tmp_b”] ..)

所以:

function resetTemps($arr)
{
    foreach( $arr as $key => $value )
    {
        if( is_array( $value ) )
        {
            resetTemps($value);
        }
        else
        {
            if( substr($key,0,3)=='tmp' )
            {
                unset( $arr[$key] );
            }
        }
    }
}

然后将其称为

resetTemps($_SESSION);