php in_array给出奇怪的结果

时间:2013-10-14 23:54:15

标签: php arrays

我已经阅读了关于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语句也永远不会评估为真,我缺少什么?

2 个答案:

答案 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 );
}