有没有更精简的方法来编写此逻辑?

时间:2019-02-05 18:53:34

标签: php

所以我有以下逻辑,如果它在数组中,则返回一个值;否则,仅返回原始值:

$trnTitle = $translateMap[$title];
if($trnTitle)
   return $trnTitle;
return $title;

是否有更流畅的方式编写此内容?我只是觉得我只能写一行而不是调用该变量三次。

3 个答案:

答案 0 :(得分:2)

php 7开始,您可以使用Null-Coalescing运算符,如果$translateMap[$title]为null(未填充)。

return $translateMap[$title] ?? $title;

在此处查看更多信息:

http://php.net/manual/en/language.operators.comparison.php#language.operators.comparison.coalesce

答案 1 :(得分:0)

从您的代码示例中,我不确定您要达到100%的目标。我看到了两种看待它的方法。

  1. 您不知道数组$title中是否存在索引$translateMap。如果存在,则从数组返回其值或返回索引本身:

return $translateMap[$title] ?? $title; <== http://php.net/manual/en/migration70.new-features.php#migration70.new-features.null-coalesce-op

  1. 您知道数组translateMap中存在索引标题,您只是在检查它是否真实。如果是事实,则从数组中返回值,否则为索引本身。

return $translateMap[$title] ?: $title; <== http://php.net/manual/en/control-structures.if.php#102060

警告:如果索引$title在数组$translateMap中不存在,则此操作将失败


解决方案2就是您示例中的

答案 2 :(得分:-2)

您可以使用空合并运算符,它看起来像??

根据official PHP documentation

  

对于需要将三元数与isset()结合使用的常见情况,将空合并运算符(??)添加为语法糖。如果它存在且不为NULL,则返回其第一个操作数;否则返回第一个操作数。否则,它将返回其第二个操作数。

所以只用这个:

return $translateMap[$title] ?? $title

要感谢Nigel Ren,Vody和Manual Otto的评论。