如何用三元操作符(? :)替换“ if”语句?

基于示例 从这一页,我想将下面的 if语句转换为三元运算符。

使用 if语句的工作代码:

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

我不确定应该如何使用三元操作符来编写,以便只有当数组中存在 street2且不是空字符串时,echo才能工作。

437864 次浏览

三元运算符只是和 if/else 块的简写。您的工作代码没有 else 条件,因此不适合这种情况。

下面的例子可行:

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

那个

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

语法不是一个“简写的 if”运算符(?被称为条件运算符) ,因为你不能像以前那样执行代码:

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

在您的示例中,当 $address不为空时执行 echo语句。你不能用同样的方法对付条件运算符。然而,你可以做的是 echo条件运算符的结果:

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

如果它是空的,那么它将显示“ Street is nothing!”,否则它将显示 Street 2地址。

我觉得你把括号用错了,试试这个:

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

我觉得应该可以,你也可以用:

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

有条件的欢迎辞

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

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

看起来 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 # 中的相同代码在两种情况下都返回“ Exception”。

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

  1. $score > 10吗? 是的
  2. $age > 10吗? 不,所以当前的 $age > 10 ? 'Average' : 'Exceptional'返回“ Exception”
  3. 然后,它不会停止整个语句并返回“ Exception”,而是继续计算下一个语句
  4. 下一个语句变成 'Exceptional' ? 'Horrible' : 'Average',返回“ Horrible”,因为“ Exception”是真实的

来自文档: http://php.net/manual/en/language.operators.comparison.php

建议您避免“堆叠”三元表达式 在一个单元中使用多个三元运算符时的行为 声明是不明显的。

基本真/假声明

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

档号: https://davidwalsh.name/php-ternary-examples

通过用 <?= code ?>替换 echo,您可以缩短这个过程

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

这是非常有用的,特别是当你想在导航栏中确定菜单选项是否应该显示为已经访问(单击) :

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

PHP7 +

在 PHP 7中,这个任务可以像下面这样简单地使用 空结合运算符来执行:

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

还有一个简写的三进制运算符,看起来像这样:

(Expression1) ? : Expression2将返回 表情1,如果它的计算结果为 true,或者返回 表情2

例如:

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

会回来的

Apples are great!

从 PHP 5.3开始,可以省略 如果 expr1,表达式 expr1? : expr3返回 expr1 计算结果为 TRUE,否则为 exp3。

来自 PHP 手册

快捷方式:

echo $address['street2'] ? : "No";

这里有一些有趣的例子,有一个或多个不同的条件。

$color = "blue";


// Example #1 Show color without specifying variable
echo $color ? : "Undefined";
echo "<br>";


// Example #2
echo $color ? $color : "Undefined";
echo "<br>";


// Example #3
echo ($color) ? $color : "Undefined";
echo "<br>";


// Example #4
echo ($color == "blue") ? $color : "Undefined";
echo "<br>";


// Example #5
echo ($color == "" ? $color : ($color == "blue" ? $color : "Undefined"));
echo "<br>";


// Example #6
echo ($color == "blue" ? $color : ($color == "" ? $color : ($color == "" ? $color : "Undefined")));
echo "<br>";


// Example #7
echo ($color != "") ? ($color != "" ? ($color == "blue" ? $color : "Undefined") : "Undefined") : "Undefined";
echo "<br>";

在 PHP 7 + 中更新

// Check if the value exists
echo $_GET['user'] ?? "Undefined";
// Before isset($_GET['user']) ? $_GET['user'] : 'undefined';


// Multiple conditions can be added
echo $_GET['user'] ?? $_POST['user'] ?? $color ?? 'Undefined';

这是三元操作员又名猫王操作员(谷歌它: P)你正在寻找。

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

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

我认为你可能不应该在 PHP 中使用三元操作符。 考虑下一个例子:

<?php


function f1($n) {
var_dump("first funct");
return $n == 1;
}


function f2($n) {
var_dump("second funct");
return $n == 2;
}




$foo = 1;
$a = (f1($foo)) ? "uno" : (f2($foo)) ? "dos" : "tres";
print($a);

你认为 $a变量会包含什么? (提示: dos) 即使 $foo变量被赋值为2,它也将保持不变。

为了让事情变得更好,你可以拒绝使用这个操作符,或者用大括号把右边的部分包围起来,方法如下:

$a = (f1($foo)) ? "uno" : ((f2($foo)) ? "dos" : "tres");

三元运算符基本上是 if/else 语句的简写。我们可以使用它来减少代码行数并增加可读性。

你的代码对我来说看起来更干净。但是我们可以添加更干净的方式如下-

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

另一种方式-

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

注 - 我在整个表达式中添加了方括号以使其更加清晰。我通常这样做是为了增加可读性。 有了 PHP7,我们可以使用 零聚合算子/php 7? ? 算子更好的方法。但是你的要求它不适合。

如果第一个变量($a)是 null,那么将第二个变量($b)的值赋给第一个变量($a)

 $a = 5;
$b = 10;


$a != ''?$a: $a = $b;


echo $a;


我不认为我在以上所有的解决方案中找到了答案。 有些人也错了。 < br > < br > 若要测试变量(或数组的元素或对象的属性)是否存在(并且不为空) ,请使用: echo isset($address['street2']) ? $address['street2'] : 'Empty';

要测试变量(...)是否包含一些非空数据,请使用:
echo !empty($address['street2']) ? $address['street2'] : 'Empty';

还有其他的简写吗?

试试这个

  ($value == 1) ? "selected" : "";