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应该找到“给定变量是否为数组”。但是,我想我一定是在这里误解了一些东西......

4

3 回答 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 />';
    }
}
于 2012-10-01T18:24:09.107 回答
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 />';
    }
}
于 2012-10-01T18:24:24.060 回答
0

利用:

foreach($_SESSION as $key=>$val){
    if(is_array($val)){
    // code here
    }
}
于 2012-10-01T18:24:45.823 回答