如何对数组执行NULL和未定义的检查


How can I do NULL and undefined check for an array

我想实现以下逻辑-如果有一个数组,比如会话中的"portfolioHistoryResults",那么循环它并显示其他什么都不做。

这不是什么大不了的事,但我是PHP的新手,看起来PHP不像其他脚本语言那样工作,因为当我使用以下代码时

if ($_SESSION["portfolioHistoryResults"] != null
    && $_SESSION["portfolioHistoryResults"] != undefined)
{

然后我得到了Notice: Undefined index: portfolioHistoryResults in /home/abc/vhosts/localhost/views/common/portfolio.php on line 14

在执行该行时,我已经创建了会话对象,但在某些情况下,它内部不会有"portfolioHistoryResults"变量。看起来PHP希望始终存在或定义。

有人能阐明这在PHP中是如何工作的吗。

使用isset()函数测试是否定义了var而不是null:

if(isset($_SESSION["portfolioHistoryResults"])){
   // your code
}

查看此处的信息:http://php.net/manual/en/function.isset.php

您也可以阅读关于$_SESSION var的页面:http://php.net/manual/en/reserved.variables.session.php

在您的代码中,似乎没有在portfolioHistoryResults密钥中存储任何内容,例如:

$_SESSION["portfolioHistoryResults"] = "test";

编辑

要回答您的评论,您可以在var上使用isset(),而不是表达式。这意味着,例如,你不能像这样使用isset()

if(isset($test && $otherTest)){
  //your code
}

但下面的代码会起作用,因为你可以单独测试变量,而不是一起测试:

if(isset($test) && isset($otherTest)){
  //your code
}

如果你确定你想要一个数组,你可以使用:

if (is_array($_SESSION["portfolioHistoryResults"])) {
    // Do something
}

关于is_array()的信息

您可以使用isset()函数进行相同的检查:

if (isset($_SESSION["portfolioHistoryResults"]))
{