如果我有聲明:PHP條件>如何知道什麼不匹配?
$a = 1;
$b = 2;
$c = 3;
if($a == 1 && $b == 2 && $c == 3)
{
echo 'correct';
}
else
{
echo 'what variable's weren't matched';
}
有沒有知道什麼是沒看的,而不是單獨把每件事寫什麼辦法?
乾杯!
如果我有聲明:PHP條件>如何知道什麼不匹配?
$a = 1;
$b = 2;
$c = 3;
if($a == 1 && $b == 2 && $c == 3)
{
echo 'correct';
}
else
{
echo 'what variable's weren't matched';
}
有沒有知道什麼是沒看的,而不是單獨把每件事寫什麼辦法?
乾杯!
不會。您的表達式已變成布爾型,因此除了再次檢查相等性之外,您無法找出哪個觸發了「false」。
你需要單獨測試每個,但你可以做這樣的事情:
$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!';
}
但是這不僅僅是不太清楚:
$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!';
}
都能跟得上!這是不可能的。儘管如此,你可以通過使用數組使生活變得簡單很多:
$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!";
}
例如,
其實,呃,我收回我的評論。你可以依靠布爾短路設置一個變量,表示有條件的最後一部分是真實的:
if (($x = 'a') && $a == 1 && ($x = 'b') && $b == 2 && ($x = 'c') && $c == 3) {
echo "correct\n";
} else {
echo "$x is wrong\n";
}
注意,我絕不會在生產代碼寫這一點,因爲這是愚蠢的,並很難理解什麼是應該會繼續。但至少有趣的是,擺弄。
+1不適用於生產,但是一個很好的示例來演示如何評估表達式。 – MrCode 2012-04-05 19:19:14
沒有。如果你想知道哪一個不匹配,你需要執行三個不同的條件。 – 2012-04-05 18:37:53
一個簡單但愚蠢的解決方案是從數組中刪除值,如果爲true,那麼你將有非匹配值 – Gerep 2012-04-05 18:38:08
@Gerep什麼數組? – AlienWebguy 2012-04-05 18:38:44