Php 如果在连接中间的语句?

Php 如果在连接中间的语句?,php,if-statement,concatenation,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 { .

这不管用吗?还是我只是做错了?尝试了它的多种变体,但似乎找不到关于该主题的任何可靠信息。有什么想法吗

    $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>';
$given_id=1;
while($row=mysql\u fetch\u数组($sql))
{
如果($i<10){
$display='';

if..else
是一个语句,不能在表达式中使用。您需要的是“三元”
?:
运算符:。

使用三元运算符的简写if语句
?:
-

$display = 'start ' . (($row['type']=="battle")? 'showB' : 'showA') . ' end ';

如果是语句,请参见

上的“三元运算符”。不能将语句放入表达式中

$str = 'foo';
if (cond)
{
  $str .= 'bar';
};
$str .= 'baz';

if是一个独立的语句。它类似于一个完整的语句。所以你不能在字符串之间使用它。 更好的解决方案是使用速记三元运算符

    (conditional expression)?(ouput if true):(output if false);
这也可用于串接。例如:

    $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';
您还可以使用嵌套三元运算符:

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

我觉得我刚刚中了彩票。三元算符很好,但是它可以使代码变得不可读。在有意义的地方使用它。如果有人要读你的代码,你可能会考虑不使用它。@ VVV你赢得了一个链接到手册。明智地使用它。我也觉得我刚刚赢得了彩票…谢谢你那令人敬畏的Li。nk:)你为什么要写这样不可读的代码?正确地布局代码,你可能会在过程中纠正错误。从使用
sprintf开始
不知道为什么这个问题会因为与地理、时间或异常情况有关而被解决。通常使用三元运算符x?y:z,在很多情况下,我发现这个页面基本上是想看看PHP是否提供了这个功能。幸运的是,这个页面仍然存在(尽管已经关闭),并且能够解决我的查询。我认为最后一行的可读性大约等于
(1>2)('x'>'flowers'?0:3):($j>42?ceil(pi()):$kittens=true)-1
-1;你在开始的几句话中摸索的是陈述和表达之间的区别,但你使用的是虚构的术语“自立陈述”和“完整陈述”这并不能真正解释为什么一个
if
构造不能连接到一个字符串上。我并没有完全那样使用它,但upvote给我一个ideaA三元不是一个“简写if语句”,它是一个表达式。这样做的好处是,您可以节省时间和资源,将字符串存储在变量中,然后连接到其他字符串中。它与现有字符串的流程一致。