我已经阅读了关于in_array的所有其他文章,但仍然不明白为什么我的结果很奇怪。我将继承其他人的代码,并不完全理解为什么他们做了某些事情。当用户登录时,数据从数据库中获取,其中一个字段是其“级别”。 1是管理员,2是普通用户等。一旦从数据库中获取数据,我们将用户级别(存储为:1:{i:0; s:1:“2”)放入数组中:
$user_level = unserialize($this->result['user_level']);
$_SESSION['unt']['user_level'] = $user_level;
稍后我们会检查这是否是管理员:
error_log(print_r($_SESSION['abc']['user_level'])); //this is always "1"
if (in_array('1', $_SESSION['abc']['user_level'])) { //should be yes, correct?
然而,即使SESSION变量为1,if语句也永远不会评估为真,我缺少什么?
答案 0 :(得分:2)
$_SESSION['abc']['user_level']
似乎不是一个数组。看起来你想要以下之一。
如果gettype($ _ SESSION [' abc'] [' user_level'])是'整数':
if ($_SESSION['abc']['user_level']) === 1) {
如果gettype($ _ SESSION [' abc'] [' user_level'])是'字符串':
if ($_SESSION['abc']['user_level']) === '1') {
如果gettype($ _ SESSION [' abc'] [' user_level'])是' string'它的值实际上包含引号:
if ($_SESSION['abc']['user_level']) === '"1"') {
如果是数组,输出将具有此结构,而不仅仅是" 1":
Array
(
[0] => 1
)
答案 1 :(得分:0)
即使我注意到输入字符串中缺少右括号}
,我只是假设您在复制粘贴时可能错过了。
a:1:{i:0;s:1:"2"
所以in_array
不是问题,但输入字符串是问题。
设置display_errors
Off
时,当您尝试{{1}时,您不会看到任何错误它。
您可以使用以下函数检查输入是否是要反序列化的有效字符串:
unserialize
然后就是这样的话:
// Copied from http://www.php.net/manual/en/function.unserialize.php
function is_serialized( $str )
{
return( $str == serialize( false ) || @unserialize( $str ) !== false );
}