在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
的性能更好,如果其行为可以接受的话。谢谢!我不能让它正常工作,但我喜欢这种方法。没问题。如果我能帮你解决问题,请告诉我。