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

时间:2012-03-28 14:10:46

标签: php mysql html

所以我有这个调查,我正在提取结果,我必须基本上做一堆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复制它?

UPDATE :: 在这一点上,我不知道为什么以下解决方案都没有起作用。我认为这可能是一个更深层次的问题,因为结果仍然重复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']; 
 }

7 个答案:

答案 0 :(得分:4)

你需要一对额外的括号,以明确你的操作符应该是什么优先级(你不需要围绕每个表达式的括号):

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;
   }
}

答案 1 :(得分:2)

您可以使用带开关状态的if。

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的函数。

答案 2 :(得分:1)

如果你说你没有得到5和6的相同输出,那么我不知道问题是什么(也许你应该仔细检查这个值)

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

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 的作用是什么,但这部分似乎是相同的

答案 3 :(得分:1)

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];

答案 4 :(得分:0)

尝试使用此代码,它更高效,更清晰,并且(希望)可以解决问题:

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;
  }
}

答案 5 :(得分:0)

看看是否这样做。

<?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'];
        }
?>

答案 6 :(得分:0)

而是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;&amp;与||具有相同的优先级你的代码,你的代码可以工作。