0

我在我的代码中实现了 if 条件,条件是 john 是否设置为显示 abc.jpg 否则为 xyz.jpg 但它不起作用它每次都向我显示 xyz .jpg 图像。请帮我。如果我的语法错误,请告诉我错误在哪里。

<?php
if($extra = "John" || "Kevin" || "Cameron" || "Santosh" || "Ali"){ ?>
    <img src="http://yespricer.com/theme/Freshness/images/maria2.png" width="75"/>
<?php }else{ ?>
    <img src="http://yespricer.com/theme/Freshness/images/maria.png" width="75"/>
<?php } ?>
4

6 回答 6

3

您每次都需要检查是否$extra等于值。您的代码只执行一次。您可以将数组中的所有值分组并检查您的值是否在其中:

$names = array("John", "Kevin", "Cameron", "Santosh", "Ali");
if(in_array($extra, $names)) {
    // $extra is in $names
}
于 2012-11-01T12:00:05.773 回答
0

与上述其他人建议的方式非常相似,但在我看来更整洁

<?php
    $name = "";
    if($extra == "John" || $extra =="Kevin" || $extra =="Cameron" || $extra =="Santosh" || $extra == "Ali"){ 
        $name = "maria2.png";
    }else{
        $name = "maria.png";
    }
?>
<img src="http://yespricer.com/theme/Freshness/images/<?php echo $name;?>" width="75" />
于 2012-11-01T12:03:53.590 回答
0

它应该是

if($extra == "John" || $extra == "Kevin" || 
   $extra == "Cameron" || $extra == "Santosh" || 
   $extra == "Ali"){

}

编辑

正如des建议的那样in_array,您也可以使用此解决方案

$names = array("John", "Kevin", "Cameron", "Santosh", "Ali");

echo "<img src='http://yespricer.com/theme/Freshness/images/"
  .(in_array($extra, $names)?'maria1':'maria')
  .".png' width='75'/>";
于 2012-11-01T11:58:03.703 回答
0

更好更有效的方法是使用in_array()

<?php
if(in_array($extra, array("John", "Kevin", "Cameron", "Santosh", "Ali")){ ?>
    <img src="http://yespricer.com/theme/Freshness/images/maria2.png" width="75"/>
<?php }else{ ?>
    <img src="http://yespricer.com/theme/Freshness/images/maria.png" width="75"/>
<?php } ?>
于 2012-11-01T12:06:39.293 回答
0

你不能使用

if($extra = "John" || "Kevin" || "Cameron" || "Santosh" || "Ali"){

原因

因为如果你从左到右,$extra == "John"... 好的,这很好,因为它可以根据 $extra 的值评估为真或假。但是,下一个是这样的:

if ("Kevin") {

由于非空字符串的计算结果为 true,因此您不妨这样写:

if($extra = "John" || true || true || true || true){

由于您使用的是逻辑 OR,因此 $extra 是什么并不重要,因为每一个都会导致 if 条件为 TRUE。

解决方案 1 - 凌乱的条件

if($extra == "John" || $extra == "Kevin" || $extra == "Cameron" 
|| $extra == "Santosh" || $extra == "Ali"){

解决方案 2 - 按照 des 的建议

$names = array("John", "Kevin", "Cameron", "Santosh", "Ali");
if(in_array($extra, $names)) {
    // $extra is in $names
}

解决方案 3 - 比 ifs 更干净,比数组更快且仍然灵活

switch ($extra) {
    case "John":
    case "Kevin":
    case "Cameron":
    case "Santosh":
    case "Ali":
        //code here for TRUE, if any of those names match $extra


        break;
    default:
        //code here for FALSE, if non of the names match $extra



}
于 2012-11-01T12:08:34.880 回答
0

如何更多地了解正在发生的事情?将您的条件分配给一个变量:

$result = $extra = "John" || "Kevin" || "Cameron" || "Santosh" || "Ali";

然后让你的情况可见:

var_dump($result);

这会给你:

bool(true)

这意味着条件导致布尔值truedemo)。为什么会发生这种情况,您现在可能会问自己。为此,您可以将条件分开:

"John" || "Kevin" || "Cameron" || "Santosh" || "Ali"

这是truePHP 中的表达式。您可以将其替换为true. 接下来的部分:

$extra = true;

这很容易。您分配true给变量$extra. 现在是最后一部分:

$result = true;

同样,现在将表达式的结果分配给$resultso 你看true

相反,您可能想检查变量是否$extra包含任何名称。PHP 中有一些注意事项可以正确地做到这一点。首先让您的生活更轻松,并将您想要检查的所有名称放入一个数组中:

$names = array("John", "Kevin", "Cameron", "Santosh", "Ali");

然后严格检查$extra该数组中的内容:

$result = in_array($extra, $names, true);

请注意此处的第三个参数true,即用于严格检查(请参阅in_arrayDocs)。否则,您可能会看到如果$extra0这样$result的话。然后处理结果,但让你的生活再次变得轻松,你只需要一个变量:

$image = $result ? 'maria2.png' : 'maria.png';

然后最后做输出:

printf(
    '<img src="http://yespricer.com/theme/Freshness/images/%s" width="75"/>'
    , $image
);

你已经解决了你的问题。完整的代码示例:

$names  = array("John", "Kevin", "Cameron", "Santosh", "Ali");
$result = in_array($extra, $names, true);
$image  = $result ? 'maria2.png' : 'maria.png';
printf(
    '<img src="http://yespricer.com/theme/Freshness/images/%s" width="75"/>'
    , $image
);

演示

另见:

于 2012-11-01T12:43:36.630 回答