пытаясь сэкономить время с помощью PHP if / elseif операторов - PullRequest
0 голосов
/ 21 сентября 2011

У меня довольно большой оператор if:

if (!$result_spam)
{
$confrim_spam = "FAILED";

}
else if ($result_spam)
{
$confrim_spam = "PASSED";
}

if (!$result_email_manage)
{
$confrim_email_manage = "FAILED";

}
else if ($result_email_manage)
{
$confrim_email_manage = "PASSED";
}

if (!$result_analyt)
{
$confrim_analytics = "FAILED";
}

else if ($result_analyt)
{
$confrim_analytics = "PASSED";
}

Теперь я хочу сделать еще один оператор if, чтобы проверить, все ли PASSED или все они имеют FAILED, или некоторые имеют PASSED, а некоторые имеют FAILED, а затемэхо (что-то сделать) с ошибками.

Я знаю, как проверить, все ли прошло или нет:

if ($confirm_spam == "PASSED" AND $confirm_analytics == "PASSED"

, но чтобы проверить, прошли ли некоторые, а некоторые нет изатем найти тех, кто потерпел неудачу, займет слишком много времени, верно?

Мне было просто интересно, есть ли более простой / быстрый способ сделать это?

Ответы [ 3 ]

2 голосов
/ 21 сентября 2011

Так как все они все равно bools:

if($result_spam && $result_email_manage && $result_analyt){
    //do all passed
}
elseif($result_spam || $result_email_manage || $result_analyt){
   //at least one passed
   if(!$result_spam){ echo '$result_spam failed';}
   if(!$result_email_manage){ echo '$result_email_manage failed';}
   if(!$result_analyt){ echo '$result_analyt failed';}
}
else {
   //do all failed
}
1 голос
/ 21 сентября 2011

Что если вы попробуете так:

$passed = $failed = "";

$all = array("confrim_spam" => $result_spam,
             "confrim_email_manage" => $result_email_manage,
             "confrim_analytics" => $result_analyt);


foreach($all as $a => $b)
{
    if (!$b)
        $failed.= $a . ", ";
    else
        $passed.= $a . ", ";
}

Тогда, если переменная $passed пуста, ничего не передается, если $failed не пусто, в конце концов, не прошло .. так что вы получили то, что прошло, а что не удалось и что-то с ними сделали. И вы можете хранить результаты как в строке или массиве, что вы хотите ...

1 голос
/ 21 сентября 2011

Вы можете изменить логику проверки на что-то вроде

$passed = array();
$failed = array();
if (!$result_spam)
{
   array_push($failed, "confirm_spam");
}
else
{
   array_push($passed, "confirm_spam");
}
...

Тогда у вас есть простой и понятный способ проверить, все ли пройдены / не пройдены и какие тесты не пройдены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...