【问题标题】:Performing an if statement in a variable [closed]在变量中执行 if 语句 [关闭]
【发布时间】:2012-12-30 23:55:58
【问题描述】:

我想要一个包含 if 语句的变量,在 WordPress 中执行此操作,但似乎无法使其工作。

这是我的代码:

<?php $priceperpost= {
   if ( $linecount > 15) 
{ 
   echo "109";
}
elseif ($linecount > 30) {
   echo "89";
}
elseif ($linecount > 100) {
   echo "Please Call";
}
else {
   echo "129";
}  
}
?>

【问题讨论】:

  • 如果$linecount > 100 它永远不会到达echo 行,因为它已经在第一个if 上命中。
  • 而且您不能将代码块分配给变量。您需要阅读语句和表达式。
  • 任何大于100的东西也大于15和30!按降序排列。

标签: php wordpress if-statement


【解决方案1】:

这里是一个如何做单行 if 语句的例子;你必须嵌套它们以获得你想要的效果。基本上在这段代码中,如果 x 等于 1,则 $value 被赋值为 2。否则它得到值 3。

$x = 1;
$value = ($x == 1 ? 2 : 3);
echo $value;

输出:2

相当于:

$x = 1;
if ($x == 1) {
    $value = 2;
} else {
    $value = 3;
}
echo $value;

【讨论】:

  • 在可读性方面,使用三元运算符的嵌套语句并不是一个好主意。
【解决方案2】:

假设您尝试分配该值而不是直接输出到屏幕上:

<?php
  $priceperpost = "129"; // default
  if ($linecount > 100) {
    $priceperpost = "Please call"; // highest price break value first
  } elseif ($linecount > 30) {
    $priceperpost = "89";
  } elseif ($linecount > 15) {
    $priceperpost = "109"; // lowest price break value last
  }
 ?>

或者更紧凑和更灵活的东西 - 您可以将值存储在文件或数据库中并从该数据生成数组,而不必为新的价格突破值编写新的 elseif:

<?php
  $priceArray = array( // insert price break values in descending order
    100 => "Please call",
    30 => "89",
    15 => "109",
    0 => "129",
  );

  foreach ($priceArray as $breakValue => $price) {
    if ($linecount > $breakValue) {
      $priceperpost = $price;
      break; // found the price break, so we can exit the loop here
    }
  }
?>

【讨论】:

    【解决方案3】:

    我会这样做,因为如前所述,在您提供的示例中,只有您的第一个 if 或您的 else 会被击中:

    switch (true) {
        case $linecount > 100:
            $priceperpost = "Please Call";
            break;
    
        case $linecount > 30:
            $priceperpost = 89;
            break;
    
        case $linecount > 15:
            $priceperpost = 109;
            break;  
    
        default:
            $priceperpost = 129;
            break;
    }
    

    一般来说,当elseifs 越来越多时,它往往会变得有点难以阅读。在这些情况下,为了便于阅读,我通常更喜欢 switch 声明(但对此似乎意见不一)。

    演示:http://codepad.viper-7.com/UnztIT

    【讨论】:

    • 非常感谢,您的示例非常适合我 :-)
    猜你喜欢
    • 1970-01-01
    • 2023-04-04
    • 2015-07-11
    • 2015-08-17
    • 1970-01-01
    • 2012-10-20
    • 2021-09-11
    • 1970-01-01
    • 2023-04-04
    相关资源
    最近更新 更多