我想检查 2 个变量是否相同,如果是,则回显一个字符串。这可能在串联中吗?并在不创建单独功能的情况下做到这一点?
例如
$var = 'here is the first part and '. ( $foo == $bar ) ? "the optional middle part" .' and the rest of the string.'
编辑
请注意,我正在寻找是否有办法在没有: ''
. 如果您愿意,可以使用“二元运算符”。
我想检查 2 个变量是否相同,如果是,则回显一个字符串。这可能在串联中吗?并在不创建单独功能的情况下做到这一点?
例如
$var = 'here is the first part and '. ( $foo == $bar ) ? "the optional middle part" .' and the rest of the string.'
编辑
请注意,我正在寻找是否有办法在没有: ''
. 如果您愿意,可以使用“二元运算符”。
不要试图把事情缩短太多。您需要它: ''
才能使事情正常进行。
用于(condition) ? "show when true" : ""
根据条件显示可选文本。三元运算符是这样命名的,因为它由 3 个部分组成。
$var = 'here is the first part and '. (( $foo == $bar ) ? "the optional middle part" : "") .' and the rest of the string.';
如果问题是“我可以不用冒号和空引号吗?” 答案是否定的,你不能。你必须有结束语:''
,最好用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));
三元运算符语法如下
(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.'
这意味着您的条件缺少其他过去和运算符优先级