所以我有这个调查,我正在从中获取结果,我基本上必须做出一系列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)))
为什么?如果&;如果与您的代码具有相同的优先级,则您的代码可以工作。