JasonDavis
JasonDavis

Reputation: 48933

How can I check that an array key exist if the array does not exist in PHP

I am in a bind, multiple times on a page for different form items, I insert a css div class into a form item ONLY if an error_array key exists, this is how I highlight a form item that has an error in it.

Works, great if I have an error because then my error array is set, problem is before an error is set, it tries to look for an array key that does not exist. I was thinking using php's isset function first would be the ticket but I guess you cannot combine isset with another function?


<?php
//this works
$search_array = array('first' => 1, 'second' => 4);

if (array_key_exists('first', $search_array)){
    echo "good";
}


// this does not work, will give write errors
$search_array = array('first' => 1, 'second' => 4);

if (isset(array_key_exists('first', $search_array))){
    echo "good";
}

// Here is  1 example how I need to make the end result work
$country_class = (array_key_exists('country', $signup_errors)) ? ' signup_error' : ' signup_good';
echo '<select name="country" id="country" class="textarealong ' .$country_class. '"/>';
?>

In other parts I use it like this

<?PHP echo(array_key_exists('password', $signup_errors)) ? ' signup_error' : ' signup_good';?>

And I need to have it be a 1 line code if possible

Upvotes: 1

Views: 2371

Answers (3)

AbraCadaver
AbraCadaver

Reputation: 78994

This is an old question, but it's an even simpler answer. isset checks the array and the key. This works great and doesn't generate any notices if the array is not set:

if (isset($search_array['first'])){
    echo "good";
}

Or:

$country_class = isset($signup_errors['country']) ? ' signup_error' : ' signup_good';

Upvotes: 0

Exp HP
Exp HP

Reputation: 725

I'm not familiar enough with PHP syntax, but this sounds like a job for short-circuit evaluation, i.e. || or &&, where the second term is not evaluated if the first term alone can determine the result (if it's True in || or False in &&).

Upvotes: 0

Tammo
Tammo

Reputation: 1178

If isset is false, the second statement wont get executed, because the parsers knows that both statements have to be true to get the whole statement true.

   $country_class = ( isset($signup_errors) && array_key_exists('country', $signup_errors)) ? ' signup_error' : ' signup_good';

BUT i would suggest you to initialize every variable you are using...

Upvotes: 4

Related Questions