1

I want to implement following logic - if there is an array, lets say "portfolioHistoryResults" in session, then loop it and display else do nothing.

This is not at all a big deal, but I am new to PHP and looks like PHP doesn't work the way other scripting languages worok becayse when I use following code

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

Then I end up with Notice: Undefined index: portfolioHistoryResults in /home/abc/vhosts/localhost/views/common/portfolio.php on line 14.

At the time of executing that line I have my session object created but in certain cases it will not have have "portfolioHistoryResults" variable inside it. Looks like PHP is expecting to be always present or defined.

Can anybody throw light on how this works in PHP.

Marcio Mazzucato
  • 8,841
  • 9
  • 64
  • 79
hagrawal7777
  • 14,103
  • 5
  • 40
  • 70

3 Answers3

4

Use isset() function to test if your var is defined and not null :

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

See info here : http://php.net/manual/en/function.isset.php

You can also read this page about $_SESSION var : http://php.net/manual/en/reserved.variables.session.php

Seems in your code that you don't store anything in the portfolioHistoryResults key, like this for instance :

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

EDIT

To answer to your comment, you can use isset() on a var, not an expression. It means, for example, you can't use isset() like this :

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

But this code below will work because you test vars separatly and not together :

if(isset($test) && isset($otherTest)){
  //your code
}
Vincent G
  • 8,547
  • 1
  • 18
  • 36
  • That worked cool, but when I use it further like this ` if(isset($_SESSION["portfolioSummaryResults"]) && isset($_SESSION["portfolioSummaryResults"].portfolioSummaryArr)){` then I get `Fatal error: Cannot use isset() on the result of an expression (you can use "null !== expression" instead) in /home/abc/vhosts/localhost/views/portfolio/portfolio_results.php on line 14`. Does it mean that I only works for arrays and not other kind of variables? – hagrawal7777 Apr 09 '16 at 16:45
  • 1
    Try `if(isset($_SESSION["portfolioSummaryResults"]["portfolioSummaryArr"])){` instead of `if(isset($_SESSION["portfolioSummaryResults"]) && isset($_SESSION["portfolioSummaryResults"].portfolioSummaryArr)){` – Vincent G Apr 09 '16 at 16:48
  • But `isset($_SESSION["portfolioSummaryResults"].portfolioSummaryArr))` it not an expression, per say `isset($_SESSION["portfolioSummaryResults"].portfolioSummaryArr))` and isset($_SESSION["portfolioSummaryResults"]["portfolioSummaryArr"]))` are same things, right? Both will give reference to `portfolioSummaryArr` object of `portfolioSummaryResults` .. – hagrawal7777 Apr 09 '16 at 17:03
  • The dot is not a correct separator, you have to use brackets. Sometimes, you can use dot as seperator with template engine like Smarty but not in this case. – Vincent G Apr 09 '16 at 17:06
  • Dot is a operator to access the object and not separator, and dot is certainly a correct operator, I don't know in case of PHP, so do you mean I cannot use DOT operator to access and object in PHP ?? Can you give an example of how I can create and access an object like this in PHP (this a JS example) --> `"portfolioSummaryResults" : {"cashInHand" : 1000, "portfolioSummaryArr" : [1, 2, 3], "something" : "abc"}` – hagrawal7777 Apr 09 '16 at 17:10
  • 1
    In PHP you fetch objects with `->` and arrays with `['']` You can check this post if you wants : http://stackoverflow.com/questions/9635968/convert-dot-syntax-like-this-that-other-to-multi-dimensional-array-in-php – Vincent G Apr 09 '16 at 17:13
  • Let us [continue this discussion in chat](http://chat.stackoverflow.com/rooms/108715/discussion-between-vincent-g-and-hagrawal). – Vincent G Apr 09 '16 at 17:13
1

If you are sure you expect an array, you can use:

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

Info about is_array()

Marcio Mazzucato
  • 8,841
  • 9
  • 64
  • 79
1

You can do this same check with isset() function:

if (isset($_SESSION["portfolioHistoryResults"]))
{
Fabricio
  • 3,248
  • 2
  • 16
  • 22