所以我有这个调查,我正在提取结果,我必须基本上做一堆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'];
}
答案 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;与||具有相同的优先级你的代码,你的代码可以工作。