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
-
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...
jasondavis : perfect thanksjasondavis : Also about your comment, doesn't this initialize this variable?Guss : No it wont because even if `array_key_exists` auto-vivifies $signup_errors (and I'm pretty sure it doesn't), then the failure of `isset()` will cause it not to run at all. `isset()` obviously is not allowed to vivify the variables it tests. -
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 &&).
0 comments:
Post a Comment