基于示例 从这个页面, ,我有下面的工作和非工作代码示例。

工作代码使用 if 陈述:

if (!empty($address['street2'])) echo $address['street2'].'<br />';

使用三元运算符的非工作代码:

$test = (empty($address['street2'])) ? 'Yes <br />' : 'No <br />';

// Also tested this
(empty($address['street2'])) ? 'Yes <br />' : 'No <br />';

更新
在布莱恩的提示之后,我发现回响 $test 输出预期结果。下面的作品就像一个魅力!

echo (empty($storeData['street2'])) ? 'Yes <br />' : 'No <br />';
有帮助吗?

解决方案

(condition) ? /* value to return if condition is true */ 
            : /* value to return if condition is false */ ;

语法是不是一个“的简写,如果”操作员(?被称为条件运算),因为不能以相同的方式执行代码,如果你没有:

if (condition) {
    /* condition is true, do something like echo */
}
else {
    /* condition is false, do something else */
}

在你的榜样,您正在执行的echo语句时$address不是空的。你不能这样做的条件操作方式相同。然而,什么可以做,是echo条件运算符的结果:

echo empty($address['street2']) ? "Street2 is empty!" : $address['street2'];

这将显示“街是空的!”如果是空的,否则它会显示STREET2地址。

其他提示

PHP 7+

从 PHP 7 开始,只需使用以下命令即可执行此任务 空合并运算符 像这样 :

echo !empty($address['street2']) ?? 'Empty';

<强>基本真/假声明

$is_admin = ($user['permissions'] == 'admin' ? true : false);

<强>条件欢迎辞

echo 'Welcome '.($user['is_logged_in'] ? $user['first_name'] : 'Guest').'!';

<强>条件相关消息

echo 'Your cart contains '.$num_items.' item'.($num_items != 1 ? 's' : '').'.';

三元运算符仅仅是,如果/ else块的简写。你的工作代码不具有其他条件,所以是不适合的。

下面的例子将工作:

echo empty($address['street2']) ? 'empty' : 'not empty';

这是三元操作符a.k.a Elvis操作符(google一下:P),你正在寻找。

echo $address['street2'] ?: 'Empty'; 

它如果变量为空,则返回变量或默认的值。

注意 使用嵌套条件运算符时,您可能需要使用括号 以避免可能出现的问题!

看起来 PHP 的工作方式至少与 Javascript 或 C# 不同。

$score = 15;
$age = 5;

// The following will return "Exceptional"
echo 'Your score is: ' . ($score > 10 ? ($age > 10 ? 'Average' : 'Exceptional') : ($age > 10 ? 'Horrible' : 'Average'));

// The following will return "Horrible"
echo 'Your score is: ' . ($score > 10 ? $age > 10 ? 'Average' : 'Exceptional' : $age > 10 ? 'Horrible' : 'Average');

Javascript 和 C# 中的相同代码在两种情况下都返回“Exceptional”。

在第二种情况下,PHP 的作用是(或者至少我是这么理解的):

  1. $score > 10?是的
  2. $age > 10?不,所以当前 $age > 10 ? 'Average' : 'Exceptional' 返回“异常”
  3. 然后,它不只是停止整个语句并返回“Exceptional”,而是继续评估下一个语句
  4. 下一条语句变为 'Exceptional' ? 'Horrible' : 'Average' 返回“Horrible”,因为“Exceptional”是真的

从文档中: http://php.net/manual/en/language.operators.comparison.php

建议您避免“堆叠”三元表达式。在单个语句中使用多个三元运算符时,PHP的行为并非很明显。

<强>条件欢迎辞

echo 'Welcome '.($user['is_logged_in'] ? $user['first_name'] : 'Guest').'!';

<强>嵌套PHP速记

echo 'Your score is:  '.($score > 10 ? ($age > 10 ? 'Average' : 'Exceptional') : ($age > 10 ? 'Horrible' : 'Average') );

可以通过替换与echo <?= code ?>为此甚至更短的

<?=(empty($storeData['street2'])) ? 'Yes <br />' : 'No <br />'?>

特别是当你要确定,一个导航栏里面,无论是已经访问过的菜单选项应显示这是有用的(点击)或不:

<li<?=($basename=='index.php' ? ' class="active"' : '')?>><a href="index.php">Home</a></li>

下面是一些有趣的例子,与一个或多个不同条件。

$value1 = '1';
$value2 = '2';
$value3 = '3';

// 1 Condition
$v1 = ($value1 == '1') ? TRUE : FALSE;
var_dump($v1);
echo "<br>";

// 2 Conditions
$v2 = ($value1 == '' ? TRUE : ($value2 == '2' ? TRUE : FALSE));
var_dump($v2);
echo "<br>";

// 3 Conditions
$v3 = ($value1 == '' ? TRUE : ($value2 == '' ? TRUE : ($value3 == '3' ? TRUE : FALSE)));
var_dump($v3);
echo "<br>";

// 4 Conditions
$v4 = ($value1 == '1') ? ($value2 == '2' ? ($value3 == '3' ? TRUE : 'FALSE V3') : 'FALSE V2') : 'FALSE V1' ;
var_dump($v4);
echo "<br>";

我觉得你用括号内的错误的方式。尝试这样:

$test = (empty($address['street2']) ? 'Yes <br />' : 'No <br />');

我觉得它应该工作,你也可以使用:

echo (empty($address['street2']) ? 'Yes <br />' : 'No <br />');

还有一个简写三元运算符,如下所示:

(表达式1) ?:表达式2将返回 表达式1 如果它评估为 true 或 表达式2 否则。

例子:

$a = 'Apples';
echo ($a ?: 'Oranges') . ' are great!';

将返回

Apples are great!

自PHP 5.3以来,可以忽略三元操作员的中部。表达式 expr1 ?:如果expr1评估为true,则expr3返回expr1,否则expr3。

来自 PHP手册

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top