user982124
user982124

Reputation: 4622

PHP Checking if Array is empty logic not working

I have a page that loads and creates an empty array:

$_SESSION['selectedItemIDs'] = array();

If the user hasn't added any selections that get stored in the array I then check the array and branch accordingly, but there appears to be some error in my logic/syntax that is failing here.

Here's where I test if the $_SESSION['selectedItemIDs'] is set but empty:

if (isset($_SESSION['selectedItemIDs']) && $_SESSION['selectedItemIDs'] !== '') {
    // update the selections in a database
} else {
    // nothing selection so just record this in a variable
$selectedItems = 'no selected items were made';
}

When testing this with no selections if I print the $_SESSION['selectedItemIDs'] array I get this:

[selectedItemIDs] => Array
    (
    )

however the $selectedItems variable is not being set - it's evaluating the if test as true when I would expect it to be false, but I'm obviously misunderstanding something here.

Upvotes: 0

Views: 1412

Answers (4)

Binit Ghetiya
Binit Ghetiya

Reputation: 1979

if (!empty($_SESSION['selectedItemIDs'])) {
    // update the selections in a database
} else {
    // nothing selection so just record this in a variable
    $selectedItems = 'no selected items were made';
}

isset($_SESSION['selectedItemIDs']) => it will check is this parameter is set or not which is correct.

$_SESSION['selectedItemIDs'] !== '' => this will exactly compare that your parameter type is not '' but here i guess your selectedItemIDs is array so it let you go inside

Upvotes: 0

Abdullah A Malik
Abdullah A Malik

Reputation: 354

You can check the count of this array.

if (isset($_SESSION['selectedItemIDs']) && count($_SESSION['selectedItemIDs']) > 0) {
    // update the selections in a database
} else {
    // nothing selection so just record this in a variable
$selectedItems = 'no selected items were made';
}

Upvotes: -1

Karol Gasienica
Karol Gasienica

Reputation: 2924

$_SESSION['selectedItemIDs'] = array();

this variable is already set, but is empty. isset($_SESSION['selectedItemIDs']) check if variable exists, even if it's nothing in.

To check if there is anything just use

empty($_SESSION['selectedItemIDs']);

PHP DOC - empty

Upvotes: 0

RJParikh
RJParikh

Reputation: 4166

Use empty() function.

empty() - it will return true if the variable is an empty string, false, array(), NULL, “0?, 0, and an unset variable.

Syntax

empty(var_name)

Return value

FALSE if var_name has a non-empty and non-zero value.

Value Type :

Boolean

List of empty things :

  • "0" (0 as a string)
  • 0 (0 as an integer)
  • "" (an empty string)
  • NULL
  • FALSE
  • "" (an empty string)
  • array() (an empty array)
  • $var_name; (a variable declared but without a value in a class)

Code

if (!empty($_SESSION['selectedItemIDs']) ) {
    // update the selections in a database
} else {
    // nothing selection so just record this in a variable
$selectedItems = 'no selected items were made';
}

Upvotes: 7

Related Questions