Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/248.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_Arrays_Session - Fatal编程技术网

在PHP中检查会话值数组

在PHP中检查会话值数组,php,arrays,session,Php,Arrays,Session,会话中存储了一组用户状态。这项工作: <?php if ($_SESSION['_app_user']['data']['state']['1']) { ?> <p>User has state 1</p> <?php } ?> 用户具有状态1 但是,选择多个州不会: <?php if ($_SESSION['_app_user']['data']['state']['1,6,10']) { ?> <p>

会话中存储了一组用户状态。这项工作:

<?php if ($_SESSION['_app_user']['data']['state']['1']) { ?>

  <p>User has state 1</p>

<?php } ?>

用户具有状态1

但是,选择多个州不会:

<?php if ($_SESSION['_app_user']['data']['state']['1,6,10']) { ?>

  <p>User has state 1 or 6 or 10</p>

<?php } ?>

用户的状态为1、6或10

如何检查多个状态?

通过检查多个状态

您可能会发现将最小公分母存储到临时变量更容易:

$s = $_SESSION['_app_user']['data']['state'];
if(isset($s[1]) || isset($s[6]) || isset($s[10])) {
    echo 'Tahdah!';
}
unset($s);
另外,请在字符串中使用引号。它使代码更清晰,并为PHP解释器节省了一些精力猜测您指的是字符串而不是名为
\u app\u user
:)的常量。

可能最好使用“array\u key\u exists”函数来检查数组中是否存在给定的索引。请参见示例#2 array_key_exists()与isset()。

您还可以使用来对照您的用户状态检查一组状态。例如:

$user_states = $_SESSION['_app_user']['data']['state'];
$check_states = array( 1, 6, 10 );

$matches = array_intersect(array_keys($user_states), $check_states);
if(!empty($matches))
{
    echo "User has valid states: \n";
    foreach($matches as $_state)
    {
        echo " - {$_state}\n";
    }
}
else
{
    echo "Sorry. Not found.";
}

函数检查数组中的任意两个元素是否匹配,并返回所有匹配项。这意味着在该代码中,
$matches
数组将是用户拥有的以及在您列表中的所有状态的列表。

对于我发布的示例,您将如何实现
数组\u key\u exists
?或者你是说我应该使用Matchu的解决方案,使用
array\u key\u exists
而不是
isset
?如果(array\u key\u exists(1,$s)| |……)是的,Matchu的解决方案使用array\u key\u exists而不是isset。谢谢Stefan!我很好奇为什么它会更好?如果不在数组()中使用null值,isset会更快,因为它不是一个函数。:)我个人从不使用数组\键\存在()。。。出于性能方面的考虑。您对Stefan K关于使用
array\u key\u exists
的评论有何看法?我相信您已经了解了这一点,但是是的
isset
array\u key\u exists
的行为稍有不同,但是
isset
的性能更好,如果其行为可以接受的话。谢谢!我不能让它正常工作,但我喜欢这种方法。没问题。如果我能帮你解决问题,请告诉我。