会话中存储了一系列用户状态。这有效:
<?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 } ?>
如何查看多个州?
答案 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
数组将是用户拥有并位于列表中的所有状态的列表。