私が声明を持っている場合:
$a = 1;
$b = 2;
$c = 3;
if($a == 1 && $b == 2 && $c == 3)
{
echo 'correct';
}
else
{
echo 'what variable's weren't matched';
}
すべてを別々に書く代わりに、何が見られなかったのかを知る方法はありますか?
乾杯!
私が声明を持っている場合:
$a = 1;
$b = 2;
$c = 3;
if($a == 1 && $b == 2 && $c == 3)
{
echo 'correct';
}
else
{
echo 'what variable's weren't matched';
}
すべてを別々に書く代わりに、何が見られなかったのかを知る方法はありますか?
乾杯!
実は、へー、コメントを取り消します。真だった条件の最後の部分を示す変数を設定するために、ブール値の短絡に頼ることができます。
if (($x = 'a') && $a == 1 && ($x = 'b') && $b == 2 && ($x = 'c') && $c == 3) {
echo "correct\n";
} else {
echo "$x is wrong\n";
}
注意してください、私はこれを本番コードで書くことは決してありません. しかし、少なくともいじるのは楽しいです。
いいえ。あなたの式はブール値に変わったので、等価性を再度チェックする以外に、何が「偽」を引き起こしたかを見つけることはできません。
それぞれを個別にテストする必要がありますが、次のようなことができます。
$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!";
}
例えば。