PHP有条件>如何知道什么不匹配?

if i have statement:

$a = 1;
$b = 2;
$c = 3;
if($a == 1 && $b == 2 && $c == 3)
{
  echo 'correct';
}
else
{
  echo 'what variable's weren't matched';
}

Is there any way of knowing what didn't watch instead of writing everything separately?

Cheers!

No. Your expression was turned into a boolean, so apart from checking the equality(s) again you cannot find out which triggered the "false".

You need to test each individually, but you could do something like this:

$a = 1;
$b = 2;
$c = 3;

$a_matched = $a == 1;
$b_matched = $b == 1;
$c_matched = $c == 1;

if($a_matched && $b_matched && $c_matched)
{
  echo 'correct';
}
else
{
  if (!$a_matched) echo 'a did not match!';
  if (!$b_matched) echo 'b did not match!';
  if (!$c_matched) echo 'c did not match!';
}

but that's less clear than just:

$a = 1;
$b = 2;
$c = 3;

if($a == 1 && $b == 2 && $c == 3)
{
  echo 'correct';
}
else
{
  if (!$a == 1) echo 'a did not match!';
  if (!$b == 2) echo 'c did not match!';
  if (!$c == 3) echo 'b did not match!';
}

Nope! That's not possible. You can make life a lot simpler by using arrays, though:

$results  = array(1, 2, 4);
$expected = array(1, 2, 3);
$count    = count($results);
$wrong    = array();

for($i = 0; $i < $count; $i++) {
    if($results[$i] !== $expected[$i]) {
        $wrong[] = $i;
    }
}

if(count($wrong) > 0) {
    echo "There were wrong ones. They were at positions: " . implode(', ', $wrong);
} else {
    echo "All good!";
}

For example.

Actually, heh, I take back my comment. You can rely on the boolean short-circuiting to set a variable indicating the last part of the conditional which was true:

if (($x = 'a') && $a == 1 && ($x = 'b') && $b == 2 && ($x = 'c') && $c == 3) {
  echo "correct
";
} else {
  echo "$x is wrong
";
}

Note, I would never write this in production code because it's goofy and very hard to understand what's supposed to be going on. But fun to fiddle with, at least.