PHP&&;或者if-else语句工作不正常


PHP && or if else statement not working correctly

所以我有这个调查,我正在从中获取结果,我基本上必须做出一系列if...else if...声明,涉及提交的反馈。

我已将其设置为正确工作。。。除了一个问题。我知道这可能是愚蠢的事情,但就我的一生而言,我无法理解。

无论如何,这是代码。

if (($QID_A == 23) && ($row_result_2['Feedback'] == "")) {
    echo "";
}
else if (($QID_A == 23) && ($row_result_2['Feedback'] <= 3)) {
    echo $row_custom['Content'];
}
else if (($QID_A == 23) && ($row_result_2['Feedback'] == 4) || ($row_result_2['Feedback'] == 5) || ($row_result_2['Feedback'] == 6)) {
    echo $row_custom['Content2'];
}
else if (($QID_A == 23) && ($row_result_2['Feedback'] >= 7)) {
    echo $row_custom['Content3'];   
}

我遇到的问题是,如果$row_result_2['Feedback']==到5或6。它只是一遍又一遍地重复这条线,基本上没有进行评估。它适用于4,所以我想我的问题在于如何设置||语句?

如有任何帮助,我们将不胜感激。非常感谢。

当我在的时候,会有一种更简单的方式来写这个声明吗?所以我不必为每个QID_A字段1-50复制它?

更新::在这一点上,我不知道为什么以下解决方案都不起作用。。我认为这可能是一个更深层次的问题,因为结果仍在重复24次。。。既然QID_A是23,我认为这可能是相关的。。但我似乎找不到任何联系。。。再次感谢你们的帮助,尽管我很感激。

只是为了好玩,我试着单独写下声明。。。。相同的结果。。。例如

if (($QID_A == 22) && ($row_result_2['Feedback'] == "")) {
echo "";
 }
 else if (($QID_A == 22) && ($row_result_2['Feedback'] <= 3)) {
  echo $row_custom['Content'];
  }
  else if (($QID_A == 22) && ($row_result_2['Feedback'] == 4)) {
  echo $row_custom['Content2'];
 }
 else if (($QID_A == 22) && ($row_result_2['Feedback'] == 5)) {
  echo $row_custom['Content2'];
 }
 else if (($QID_A == 22) && ($row_result_2['Feedback'] == 6)) {
  echo $row_custom['Content2'];
 }
 else if (($QID_A == 22) && ($row_result_2['Feedback'] >= 7)) {
  echo $row_custom['Content3']; 
 }

您需要一对额外的括号来明确运算符的优先级(并且不需要在每个表达式周围使用括号):

else if ($QID_A == 23 && ($row_result_2['Feedback'] == 4 || $row_result_2['Feedback'] == 5 || $row_result_2['Feedback'] == 6)) {

echo$row_custom['Content2'];}

但你最好用一个案例来写这个逻辑,这样它会更清晰,即

if ($QID_A == 23) {
    switch( $row_result_2['Feedback'] ) {
      case '':
        echo '';
        break;
      case 0:
      case 1:
      case 2:
      case 3:
        echo $row_custom['Content'];
        break;
      case 4:
      case 5:
      case 6:
        echo $row_custom['Content2'];
        break;
      default:
        echo $row_custom['Content3']; 
        break;
   }
}

您可以将if与switch语句一起使用。

if ($QID_A == 23) {
    $feedback = $row_result_2['Feedback'];
    switch ($feedback) {
        case "":
            echo "";
            break;
        case 1:
        case 2:
        case 3:
            echo $row_custom['Content'];
            break;
        case 4:
        case 5:
        case 6:
            echo $row_custom['Content2'];
            break;
        default:
            echo $row_custom['Content3'];
    }
}

我意识到,如果你最终有更多的选择,但会让事情变得更容易,那么切换可能会有点混乱。您还可以将其分解为QID_a字段选项1-50的函数。

http://www.php.net/manual/en/language.operators.precedence.php

我想你想要:

else if (($QID_A == 23) && (($row_result_2['Feedback'] == 4) || ($row_result_2['Feedback'] == 5) || ($row_result_2['Feedback'] == 6))) {

至于你的另一个问题,如果你需要50个问题,请创建一张地图,比如:

array(qID => array(array(valuesOfFeedback), contentNumber)
if( in_array($feedback, $map[$QID_A][0]) ) echo $map[$QID_A][1];

如果你说5和6的输出与4的输出不同,我不知道问题出在哪里(也许你应该仔细检查一下值)

但对于问题的第二部分,关于另一种写同样东西的方法,我有这个选择:

if (23 == $QID_A)
{
    switch ($row_result_2['Feedback'])
    {
        case '':
            echo '';
            break;
        case 1:
        case 2:
        case 3:
            echo $row_custom['Content'];
            break;
        case 4:
        case 5:
        case 6:
            echo $row_custom['Content2'];
            break;
        default:
            echo $row_custom['Content3']; 
            break;
    }
}

我不知道$QID_A的作用是什么,但就这一部分而言,它似乎是相同的

试试这个代码,它更高效、更清晰,(希望)能解决问题:

if ($QID_A == 23) {
  switch (TRUE) {
    case $row_result_2['Feedback'] <= 3:
      echo $row_custom['Content'];
      break;
    case $row_result_2['Feedback'] <= 6:
      echo $row_custom['Content2'];
      break;
    case $row_result_2['Feedback'] <= 7:
      echo $row_custom['Content3'];
      break;
  }
}

看看这是否有效。

<?php
        if (($QID_A == 23) && ($row_result_2['Feedback'] == "")) {
            echo "";
        }
        else if (($QID_A == 23) && ($row_result_2['Feedback'] <= 3)) {
            echo $row_custom['Content'];
        }
        else if (
        ($QID_A == 23 && $row_result_2['Feedback'] == 4) ||
        ($QID_A == 23 && $row_result_2['Feedback'] == 5 )||
        ($QID_A == 23 && $row_result_2['Feedback'] == 6)
        ) {
            echo $row_custom['Content2'];
        }
        else if (($QID_A == 23) && ($row_result_2['Feedback'] >= 7)) {
            echo $row_custom['Content3'];
        }
?>

改为else if (($QID_A == 23) && ($row_result_2['Feedback'] == 4) || ($row_result_2['Feedback'] == 5) || ($row_result_2['Feedback'] == 6))写入else if (($QID_A == 23) && (($row_result_2['Feedback'] == 4) || ($row_result_2['Feedback'] == 5) || ($row_result_2['Feedback'] == 6)))为什么?如果&amp;如果与您的代码具有相同的优先级,则您的代码可以工作。