在echo语句中使用php的switch语句

4
我需要在echo语句中使用类似于switch的语句。我找到了一种方法,但我认为这不是最好的方法。当我们想要在echo中使用IF时,可以像这样写:
echo ((condition)?'print this if condition is True':'print this if condition is False');

我们可以使用这种方法作为类似开关的方式:
echo ((case1)?'case 1 result':((case2)?'case2 result':((case3)?'case3 result':'default result')));

你知道更好的方法吗?

要不把它搞反一下 - 在case里面放置echo? - Your Common Sense
三元运算符就像你在第一个例子中所使用的那样,是在echo中执行此操作的最佳方式。否则,您需要在switch语句中构建html字符串并输出结果。 - user2095686
1
我认为你应该使用 switch 或一系列的 if 语句。链式三元运算符很难阅读。 - martin
能够与您思考,您有什么实际用途的想法吗? - nl-x
2个回答

1
你的例子被称为三元运算符,它基本上是if语句的简写。
所以在你的第二个例子中,你只是执行了一系列链接的if-else语句。
你最好做这样的事情。
    switch ($type)) {
    case "txt":
         $output = "images/doctypes/icon_txt.gif";
    break;
    case "doc":
         $output = "images/doctypes/icon_doc.gif";
    break;
    case "docx":
         $output = "images/doctypes/icon_doc.gif";
    break;
    case "pdf":
         $output = "images/doctypes/icon_pdf.gif";
    break;
    case "xls":
         $output = "images/doctypes/icon_xls.gif";
    break;
    case "xlsx":
         $output = "images/doctypes/icon_xls.gif";
    break;
    case "ppt":
         $output = "images/doctypes/icon_ppt.gif";
    break;
    case "pptx":
         $output = "images/doctypes/icon_txt.gif";
    break;
    case "rtf":
         $output = "images/doctypes/icon_txt.gif";
    break;
    case "zip":
         $output = "images/doctypes/icon_zip.gif";
    break;
    case "rar":
         $output = "images/doctypes/icon_zip.gif";
    break;
    case "mdb":
         $output = "images/doctypes/mdb.gif";
    break;
    default:
         $output = "images/doctypes/icon_generic.gif";
    };

echo $output;

1
哎呀!这个问题可以考虑使用数组吗?或者,至少将相似的值分组一下? - Your Common Sense
我本来可以这样做,但我不这样做,主要是因为它随着时间的推移在复制/粘贴示例中增加了2-3个元素,但我也不会像那样回显。对于他的用法,他想要一个三元运算符的开关选项,这是一个例子。是的,正如你指出的那样有点傻,但它正好做到了他在问题中想要的。 - Dave
虽然你的例子不是很好,但你所说的道理是明智的,应该将逻辑放在echo语句之外。 - Matt

0

嗯,如果我理解正确的话,您想知道第一个成功的条件是什么?

我刚想到了一个方法...看看它是否适合您。

只需用您的条件替换false/true即可。

$i = 0;
++$i AND false OR // 1
++$i AND false OR // 2
++$i AND false OR // 3
++$i AND true  OR // 4 (here we go)
++$i AND false OR // 5
++$i AND true  OR // 6 (ignored)
++$i AND false OR // 7
$i = 0;           // 0

echo "case" . $i . " result"; // echoes 'case4 result' 

编辑:
这里有另一种使用相同技术的方法。
但是,您可以提供自己的成功字符串,而不是计数器。
请记住,只需用您的条件替换false/true即可。

function dostuff($str) { echo $str; return true;}

false AND dostuff('string1') OR
false AND dostuff('string2') OR
false AND dostuff('string3') OR
true  AND dostuff('string4') OR // echoes 'string4'
false AND dostuff('string5') OR
true  AND dostuff('string6') OR // ignored
false AND dostuff('string7');

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接