2012-10-01 185 views
0

我试图访问存储在$ _SESSION中的数组。我已经在循环之前打印出了$ _SESSION的数量和内容,以便进行良好测量。检查数组中的对象是否是另一个数组

// $_SESSION info. 
Length: 4 
Array 
(
    [loggedIn] => 1 
    [total] => 0 
    [plates] => Array ([0] => plates [1] => 14 [2] => 5) 
    [backpack] => Array ([0] => backpack [1] => 78 [2] => 1) 
) 

在这里我们可以清楚地看到最后两个对象实际上是数组。但是,当我尝试is_array方法时,

//PHP code 
$length = count($_SESSION); 
for ($i = 0; $i < $length; $i++) 
{ 
    if(is_array($_SESSION[$i])){ 
     echo 'session '.$i.' is an array.<br />'; 
    } 
    else{ 
     echo 'session '.$i.' is not an array.<br />'; 
    } 
} 

所有对象都返回false。

session 0 is not an array. 
session 1 is not an array. 
session 2 is not an array. 
session 3 is not an array. 

的API称,is_array应该发现,«给定的变量是否为数组»。但是,我想我一定是在这里误解了一些东西......

+2

你的阵列方向性的,没有索引!使用'foreach'。 $ _SESSION [0..3]不存在。 –

回答

5

不要使用for循环。使用foreach

foreach ($_SESSION as $key => $val) { 
    if (is_array($val)) { 
     echo 'session '.$key.' is an array.<br />'; 
    } else { 
     echo 'session '.$key.' is not an array.<br />'; 
    } 
} 
+0

啊,好的。谢谢! – 425nesp

1

这里的问题是,你试图迭代通过一个关联数组与数字索引,而不是适当的键。试试这个:

foreach ($_SESSION as $key => $value) 
{ 
    if(is_array($value)){ 
     echo 'session '.$key.' is an array.<br />'; 
    } 
    else{ 
     echo 'session '.$key.' is not an array.<br />'; 
    } 
} 
0

用途:

foreach($_SESSION as $key=>$val){ 
    if(is_array($val)){ 
    // code here 
    } 
} 
相关问题