5

我想检查 2 个变量是否相同,如果是,则回显一个字符串。这可能在串联中吗?并在不创建单独功能的情况下做到这一点?

例如

$var = 'here is the first part and '. ( $foo == $bar ) ? "the optional middle part" .' and the rest of the string.'

编辑

请注意,我正在寻找是否有办法在没有: ''. 如果您愿意,可以使用“二元运算符”。

4

3 回答 3

12

不要试图把事情缩短太多。您需要它: ''才能使事情正常进行。

用于(condition) ? "show when true" : ""根据条件显示可选文本。三元运算符是这样命名的,因为它由 3 个部分组成。

$var = 'here is the first part and '. (( $foo == $bar ) ? "the optional middle part" : "") .' and the rest of the string.';
于 2013-03-01T17:32:58.753 回答
1

如果问题是“我可以不用冒号和空引号吗?” 答案是否定的,你不能。你必须有结束语:'',最好用paren's来澄清你的愿望。

$var = 'here is the first part and '. 
        (( $foo == $bar ) ? "the optional middle part":'') .
       ' and the rest of the string.'

我认为这里最大的问题是你试图内联做事。这基本上归结为相同的过程,并且不使用未封闭的三元:

$var = 'here is the first part and ';
if( $foo == $bar ) $var .= "the optional middle part";
$var .= ' and the rest of the string.';

而这是实现相同目标的另一种方法,而无需担心条件会破坏字符串:

$middle = '';
if( $foo == $bar ) $middle = ' the optional middle part and';
$var = sprintf('here is the first part and%s the rest of the string.',$middle);

现在,如果你要变得不必要的聪明,我想你可以这样做:

$arr = array('here is the first part and',
             '', // array filter will remove this part
             'here is the end');
// TRUE evaluates to the key 1. 
$arr[$foo == $bar] = 'here is the middle and';
$var = implode(' ', array_filter($arr));
于 2013-03-01T17:39:11.793 回答
1

三元运算符语法如下

(any condition)?"return this when condition return true":"return this when condition return false"

所以在你的字符串中应该是这样的

$var = 'here is the first part and '.( ( $foo == $bar ) ? "the optional middle part":"") .' and the rest of the string.'

这意味着您的条件缺少其他过去和运算符优先级

于 2013-03-15T20:34:43.733 回答