如果在连接中间声明?

VVV*_*VVV 13 php if-statement concatenation

这不起作用吗?或者我只是做错了?尝试了它的多种变体,似乎无法找到关于这个主题的任何可靠信息.有任何想法吗?

    $given_id = 1;
while ($row = mysql_fetch_array($sql))
{
    if ($i < 10){
    $display = '<a href="' . $row['info'] . '" onMouseOver="' . if($row['type']=="battle"){ . 'showB' . } else { . 'showA'() . "><div class="' . $row['type'] . "_alert" . '" style="float:left; margin-left:-22px;" id="' . $given_id . '"></div></a>';
Run Code Online (Sandbox Code Playgroud)

Son*_*hew 41

如果是一个自立的声明.这就像一个完整的陈述.所以你不能在字符串连接之间使用它.更好的解决方案是使用速记三元操作

    (conditional expression)?(ouput if true):(output if false);
Run Code Online (Sandbox Code Playgroud)

这也可以用于字符串的连接.示例:

    $i = 1 ;
    $result = 'The given number is'.($i > 1 ? 'greater than one': 'less than one').'. So this is how we cuse ternary inside concatenation of strings';
Run Code Online (Sandbox Code Playgroud)

您也可以使用嵌套的三元运算符:

    $i = 0 ;
    $j = 1 ;
    $k = 2 ;
    $result = 'Greater One is'. $i > $j ? ( $i > $k ? 'i' : 'k' ) : ( $j > $k ? 'j' :'k' ).'.';
Run Code Online (Sandbox Code Playgroud)

  • 我认为最后一行的可读性大约等于`(1> 2?('x'>'花'?0:3)的结果:($ j> 42?ceil(pi()):$ kittens =真)-1)` (5认同)
  • -1; 你在前几句话中摸索的是 *statement* 和 *expression* 之间的区别,但你使用了虚构的术语“selfstanding statement”和“complete statement”,它们并没有真正解释为什么不能将 `if` 结构连接到字符串上。 (2认同)

dec*_*eze 7

if..else是一个语句,不能在表达式中使用.你想要的是"三元" ?:运算符:http://php.net/manual/en/language.operators.comparison.php#language.operators.comparison.ternary.

  • @VVV您赢得了手册的链接.明智地使用它. (7认同)
  • 我觉得我刚赢了彩票. (3认同)