在PHP中检查会话值数组

时间:2010-03-06 00:06:08

标签: php arrays session

会话中存储了一系列用户状态。这有效:

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

  <p>User has state 1</p>

<?php } ?>

但是,选择多个州不会:

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

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

<?php } ?>

如何查看多个州?

3 个答案:

答案 0 :(得分:4)

通过检查多个。

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

$s = $_SESSION['_app_user']['data']['state'];
if(isset($s[1]) || isset($s[6]) || isset($s[10])) {
    echo 'Tahdah!';
}
unset($s);

另外,请使用字符串的引号。它使代码更清晰,并且节省了PHP解释器的一些努力,猜测你的意思是一个字符串,而不是一个名为_app_user的常量:)

答案 1 :(得分:1)

可能最好使用“array_key_exists”函数来检查数组中是否存在给定索引。参见Example#2 array_key_exists()vs isset()。 http://bg2.php.net/manual/en/function.array-key-exists.php

答案 2 :(得分:1)

您还可以使用array_intersect根据您的用户状态检查状态数组。例如:

$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数组将是用户拥有并位于列表中的所有状态的列表。