если выражение в середине конкатенации?

Не работает ли это? или я просто делаю это неправильно? Пробовал несколько вариаций, и, похоже, не может найти какой-либо солидной информации по этому вопросу. есть идеи?

$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>'; 

если это самостоятельное утверждение. Это похоже на полное заявление. Поэтому вы не можете использовать его между конкатенированием строк или около того. Лучшее решение – использовать сокращенный тройной операнд

  (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' ).'.'; 

if..else является выражением и не может использоваться внутри выражения . Что вы хотите – это «тройной» ?: Оператор: http://php.net/manual/en/language.operators.comparison.php#language.operators.comparison.ternary .

Использовать сокращенное выражение с использованием тройных операторов ?:

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

См. «Терминальные операторы» на странице http://php.net/manual/en/language.operators.comparison.php

if это утверждение. Невозможно поставить выражения внутри выражения.

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