Patrioticcow
Patrioticcow

Reputation: 27038

php, how to simplify a php script?

im not sure this is a good question to post but here is my issue. I have an if statement that is getting way too long and i was wondering if there is some other kind of syntax to shorten it out:

if (($time1 <= $one_day)&&
    ($time2 <= $one_day)&&
    ($time3 <= $one_day)&&
    ($time4 <= $one_day)&&
    ($time5 <= $one_day)&&
    ($time1 != NULL)&&
    ($time2 != NULL)&&
    ($time3 != NULL)&&
    ($time4 != NULL)&&
    ($time5 != NULL)){
    //do sometihng
}

this is one example but i have a similar one that goes up to ..&&($time15 <= $one_day).

the statement is pretty self explanatory, $time1, $time2, etc can come back empty so i have to check if they are NULL or not

any ideas?

thanks

Upvotes: 3

Views: 420

Answers (7)

corrodedmonkee
corrodedmonkee

Reputation: 373

A functionised version which should help with your reuse. This is similar to Lekensteyns code.

$times = array(
    'time',
    'time',
    'time',
    'time',
    'time',
);

function validateTime($checks, $limit) 
{
    foreach($checks as $check) {
        if($check == null || $check > $limit) {
            return false;
        }
    }
    return true;
}

if(validateTime($times,$one_day) == true) {
  //codey code.
}

Upvotes: 0

Alexandre Dieulot
Alexandre Dieulot

Reputation: 524

If you must (or want to) keep the original variable names and not use an array here is the good solution (for $time1 to $time5):

$ok = true;
for ($i = 1; $i <= 5; $i++)
{
    $var =& ${'time'.$i};
    if ( ! ($var <= $one_day && $var != NULL))
    {
        $ok = false;
    }
}

if ($ok)
{
    //do something
}

Upvotes: 1

Lekensteyn
Lekensteyn

Reputation: 66395

You can put the common stuff in a function:

function validate_time($time, $one_day) {
    return $time <= $one_day && $time != NULL;
}
if (validate_time($time1, $one_day) &&
    validate_time($time2, $one_day) &&
    validate_time($time3, $one_day) &&
    validate_time($time4, $one_day) &&
    validate_time($time5, $one_day)) {
    // do something
}

You may want to refactor code and eliminate the need for copying & pasting those checks. Another way to get the job done:

while (true) {
    foreach (array($time1, $time2, $time3, $time4, $time5) as $time) {
        if ($time > $one_day || $time == NULL) {
            break 2;
        }
    }
    // do something
    break;
}

The above could be put in a function as well which would make the while-loop and break keyword redundant. Replace break 2 by return then.

Upvotes: 3

Jonathan Edgardo
Jonathan Edgardo

Reputation: 513

You can set all the values into an Array and compare it using an For Loop.

Upvotes: 0

Dennis
Dennis

Reputation: 14477

Instead of using 15 similar but different variables, consider using an array.

Upvotes: 1

Ed Heal
Ed Heal

Reputation: 59997

Put the times in an array and have a for loop to do the checking.

Upvotes: 1

Tobias
Tobias

Reputation: 9380

Using an array for you variables would help. The you can iterate over them and check.

Upvotes: 2

Related Questions