phpvariablesif-statementisset

PHP: Check if variable exist but also if has a value equal to something


I have (or not) a variable $_GET['myvar'] coming from my query string and I want to check if this variable exists and also if the value corresponds to something inside my if statement:

What I'm doing and think is not the best way to do:

if(isset($_GET['myvar']) && $_GET['myvar'] == 'something'): do something

My question is, exist any way to do this without declare the variable twice?

That is a simple case but imagine have to compare many of this $myvar variables.


Solution

  • Sadly that's the only way to do it. But there are approaches for dealing with larger arrays. For instance something like this:

    $required = array('myvar', 'foo', 'bar', 'baz');
    $missing = array_diff($required, array_keys($_GET));
    

    The variable $missing now contains a list of values that are required, but missing from the $_GET array. You can use the $missing array to display a message to the visitor.

    Or you can use something like that:

    $required = array('myvar', 'foo', 'bar', 'baz');
    $missing = array_diff($required, array_keys($_GET));
    foreach($missing as $m ) {
        $_GET[$m] = null;
    }
    

    Now each required element at least has a default value. You can now use if($_GET['myvar'] == 'something') without worrying that the key isn't set.

    Update

    One other way to clean up the code would be using a function that checks if the value is set.

    function getValue($key) {
        if (!isset($_GET[$key])) {
            return false;
        }
        return $_GET[$key];
    }
    
    if (getValue('myvar') == 'something') {
        // Do something
    }