Php 带有2个条件的If语句

Php 带有2个条件的If语句,php,if-statement,Php,If Statement,我在练习陈述时遇到了一个问题。我试图让它这样做,如果$child3可用,那么它将回送所有三个孩子,就像$child2可用时,它将回送s Kim&Pom。我做错了什么 $child = "Kim"; $child2 = "Pom"; $child3 = "Rob"; if($child2) { echo $child; echo " "; echo $child2; } elseif($child3) { echo $child; echo " "; echo $child2;

我在练习陈述时遇到了一个问题。我试图让它这样做,如果
$child3
可用,那么它将
回送所有三个孩子,就像
$child2
可用时,它将
回送
s Kim&Pom。我做错了什么

$child = "Kim";
$child2 = "Pom";
$child3 = "Rob";

if($child2) {
    echo $child; echo " "; echo $child2;
} elseif($child3) {
    echo $child; echo " "; echo $child2; echo " "; echo $child3;
} else {
    echo $child;
}

elseif
仅在前面的
if
s或
elseif
s均未执行时执行。因此,如果
,您需要将其移动到另一个
的上方:

if($child3) {
    echo $child; echo " "; echo $child2; echo " "; echo $child3;
} elseif($child2) {
    echo $child; echo " "; echo $child2;
} else {
    echo $child;
}

elseif
仅在前面的
if
s或
elseif
s均未执行时执行。因此,如果
,您需要将其移动到另一个
的上方:

if($child3) {
    echo $child; echo " "; echo $child2; echo " "; echo $child3;
} elseif($child2) {
    echo $child; echo " "; echo $child2;
} else {
    echo $child;
}

尝试反转条件:

$child = "Kim";
$child2 = "Pom";
$child3 = "Rob";

if($child3){
    echo $child . " " . $child2 . " " . $child3;
}else if($child2){
    echo $child . " " . $child2;
}else{
    echo $child;
}

您可能还喜欢奇妙的字符串串联运算符

尝试反转条件:

$child = "Kim";
$child2 = "Pom";
$child3 = "Rob";

if($child3){
    echo $child . " " . $child2 . " " . $child3;
}else if($child2){
    echo $child . " " . $child2;
}else{
    echo $child;
}
$child = "Kim";
$child2 = "Pom";
$child3 = "Rob";

if($child3){
    echo $child; echo " "; echo $child2; echo " "; echo $child3;
}elseif($child2){
    echo $child; echo " "; echo $child2;
}else{
    echo $child;
}

您可能还喜欢奇妙的字符串串联运算符

如果这是您的实际代码,您将只得到
Kim Rob
,因为
$child2
将始终是
true
,从而绕过
else
子句

$child = "Kim";
$child2 = "Pom";
$child3 = "Rob";

if($child3){
    echo $child; echo " "; echo $child2; echo " "; echo $child3;
}elseif($child2){
    echo $child; echo " "; echo $child2;
}else{
    echo $child;
}
此外,您还可以将
echo
s组合成:

echo "$child $child2 $child3";

这样读起来容易多了。

如果这是你的实际代码,你只会得到
Kim Rob
,因为
$child2
总是
true
,从而绕过
else
子句

此外,您还可以将
echo
s组合成:

echo "$child $child2 $child3";
这样读起来容易多了。

这个怎么样

if ($child) {
   echo "{$child} ";
}
if ($child2) {
   echo "{$child2} ";
}
if ($child3) {
   echo "{$child3} ";
}
这个怎么样

if ($child) {
   echo "{$child} ";
}
if ($child2) {
   echo "{$child2} ";
}
if ($child3) {
   echo "{$child3} ";
}

也许你想要这样的东西:

$child = 1; // Or $child = 2; Or $child = 3;

if ($child == 1) {
    echo 'Kim';
} elseif ($child == 2) {
    echo 'Pom';
} else {
    echo 'Rob';
}

但我建议您在拥有
elseif
后尽快使用
switch()

$child = 1; // Or $child = 2; Or $child = 3;

if ($child == 1) {
    echo 'Kim';
} elseif ($child == 2) {
    echo 'Pom';
} else {
    echo 'Rob';
}

但我建议您在拥有
elseif
后尽快使用
switch()
。我同意Dragon的观点,转换会更清晰/更好

switch (true)
{
  case (isset($child,$child2,$child3)) : 
    echo $child . ' ' . $child2 . ' ' . $child3;
    break;
  case (isset($child, $child2)) :
    echo $child . ' ' . $child2;
    break;
  case (isset($child)) :
    echo $child;
    break;
}

我会这样做的。我同意Dragon的观点,转换会更清晰/更好

switch (true)
{
  case (isset($child,$child2,$child3)) : 
    echo $child . ' ' . $child2 . ' ' . $child3;
    break;
  case (isset($child, $child2)) :
    echo $child . ' ' . $child2;
    break;
  case (isset($child)) :
    echo $child;
    break;
}



你能更清楚、更全面地描述你想要的行为吗?你正在使用If-Else If块。因此,如果满足第一个条件($child2),它将跳过代码的其余部分。如果要检查每个条件,需要三个If块,否则ifswitch\case会更容易、更清晰。@Dagon:如何切换三个不同的变量?我怀疑它会变得更清晰。@Dagon:根据命令,它肯定不会变得更清晰。但我不认为这是重点。。。否则,数组肯定是最好的解决方案。你能更清楚、更全面地描述你想要的行为吗?你正在使用If-Else If块。因此,如果满足第一个条件($child2),它将跳过代码的其余部分。如果要检查每个条件,需要三个If块,否则ifswitch\case会更容易、更清晰。@Dagon:如何切换三个不同的变量?我怀疑它会变得更清晰。@Dagon:根据命令,它肯定不会变得更清晰。但我不认为这是重点。。。否则,数组肯定是最好的解决方案。它还会产生一系列警告。什么警告?变量插值已经成为PHP的一部分至少有十年了。如果未定义$child3,并且您在运行PHP时附带E_通知,您将在输出中得到警告。OP的代码不会产生此类错误,他用“if”检查变量是否已定义,您不会。我没有编写完整的解决方案。我只是想指出OP逻辑上的缺陷。我很清楚检查一个变量是否包含一个值的必要性,并且会产生一系列警告。什么警告?变量插值已经成为PHP的一部分至少有十年了。如果未定义$child3,并且您在运行PHP时附带E_通知,您将在输出中得到警告。OP的代码不会产生此类错误,他用“if”检查变量是否已定义,您不会。我没有编写完整的解决方案。我只是想指出OP逻辑上的缺陷。顺便说一下,我很清楚检查一个变量是否包含一个值<代码> ELSIV/EXEC>是有效的必要性。顺便说一下,我也会考虑使用<代码>开关< /C>语句。要么把孩子放在一个数组和循环中,使用<代码>前缀 >代码> ELSIF < /COD>在PHP中是有效的,顺便说一下,我也会考虑使用<代码>开关语句。或者使用
foreach
将子元素放入数组和循环中,这很可能是他真正想要做的事情,尽管问题还不清楚。你是说${child}还是真的{$child},为什么不仅仅是$child?@Milanbauškov我想他想要显示所有定义的值​​.我的意思是:为什么要用花括号?{}@MilanBabuškov我总是使用卷曲语法。有关更多信息,请查看此处。当然,在这个例子中,变量可以不用花括号来使用。这很可能是他真正想要做的,尽管问题还不清楚。你是指${child}还是真的{$child},为什么不只是$child?@Milanbauškov我想他想要显示所有定义的值​​.我的意思是:为什么要用花括号?{}@MilanBabuškov我总是使用卷曲语法。有关更多信息,请查看此处。当然,在这个例子中,变量可以不用花括号来使用,这是错误的。假设只定义了$child,它仍将尝试在第二个“case”中回显$child2和$child3。您将丢失)。试着运行代码,我明白你的意思。我不想到处乱扔通告。我已经修好了,这是错误的。假设只定义了$child,它仍将尝试在第二个“case”中回显$child2和$child3。您将丢失)。试着运行代码,我明白你的意思。我不想到处乱扔通告。我已经修好了。