2012-11-15 55 views
0

“许可”是用逗号分隔的整数列表,例如:1,10,70,1000 权限字符串是塞到$ _SESSION,然后爆炸如果in_array没有按预期工作?

$permissions = $_SESSION['user']['permissions']; 
$type = explode(",", trim($permissions)); 

if(in_array(1337, $type)){ 
echo '<li><a href="protectedpage.php">Page Name</a></li>';} 

出于某种原因,之后返回$类型,没有任何回音。 我赞同$ _SESSION [ '用户'] [ '许可'],并得到1337

我所做的print_r($型),并得到阵列([0] => 1337)

那么,为什么不in_array返回true?

+4

使用var_dump($ type [0])来查看存储的值是否是整数,我真的怀疑。尝试if(in_array(“1337”,$ type) –

+1

我无法复制,它适用于我,当你将$ permissions明确地设置为1337时,它会说什么? –

+0

var_dump也会告诉你是否有类似如果将字符串长度与实际在转储中看到的内容进行比较,那么在'1,2,3,4'字符串中的空格(我怀疑它是这样) –

回答

0

尝试将1337放入报价中,'1337'。我相信这会解决你的问题。

+2

-1只有在严格模式下才有效(即第三个参数为'true')。 –

2

我执行了下面的代码,它工作正常。

$permissions = '1,10,70,1000,1337'; 
$type = explode(",", trim($permissions)); 

if(in_array(1337, $type)) 
{ 
    echo 'found'; 
} 

我建议您检查,以确保$权限是你希望它是在其失败的情况下什么。如果条件不起作用,请尝试回显它,以便您可以检查。你可能还想删除任何空间,以防止弄脏事情。

$permissions = $_SESSION['user']['permissions']; 
$type = explode(",", str_replace(' ', '', $permissions)); 

if(in_array(1337, $type)) 
{ 
    echo 'found'; 
} 
else 
{ 
    echo $permissions; 
} 
+0

+1用于错误检查的建筑。 – Jeremy1026

+1

示例显示它正在工作:http://codepad.org/fD9KEixJ –

+0

你是什么意思,它不工作 – Baba