【问题标题】:Is there a better approach than isset and ternary for PHP 7.4? (array value and string value check)PHP 7.4 有比 isset 和三元更好的方法吗? (数组值和字符串值检查)
【发布时间】:2021-09-13 21:44:39
【问题描述】:
$applicantName = (isset($params['applicant']['name']) && $params['applicant']['name'] != '') ? $params['applicant']['name'] : 

((isset($simulationCustomer['fullname']) && $simulationCustomer['fullname'] != '') ? $simulationCustomer['fullname'] :  

($simulationCustomer['name'] ?? ''));

我今天是这个代码,当然感觉不对。在 JavaScript 中写起来会容易得多,在 PHP 中的问题是合并运算符仅适用于空值。

有没有办法以更容易理解的方式来写这个?

【问题讨论】:

  • 即使在 PHP 5 中,您也可以使用 !empty() 组合 isset()!= ''
  • 新的 null 合并运算符适用于 null 值,但不适用于 ""
  • 我猜($simulationCustomer['fullname']??'')?:($simulationCustomer['name'] ?? '') 会缩短第一个三进制的最后一位。基本情况可以从 PHP 还没有的数组的 nullsafe 运算符中受益,因此目前在 PHP 8 中,使用对象和执行 ($params?->applicant?->name??($simulationCustomer['fullname']??'')?:($simulationCustomer['name'] ?? '') 会更短。这里的魔力是a?:ba?a:b一样

标签: php php-7.4


【解决方案1】:

array_filter怎么用?

$applicantName = array_values(array_filter([
    $params['applicant']['name'] ?? '',
    $simulationCustomer['fullname'] ?? ''
]))[0] ?? '';

array_values 仅用于重置索引键。

或者

$names = array_filter([
    $params['applicant']['name'] ?? '',
    $simulationCustomer['fullname'] ?? ''
]);

$applicantName = reset($names) ?: '';

【讨论】:

  • 您还需要输入$simulationCustomer['name'] ?? '' array_filter 值,因为它充当三元条件的默认值。
【解决方案2】:

如果您只想检查变量是否已设置,您可以使用?? null 合并运算符。但是,如果您想将'' 视为未设置,则需要使用!empty(),这排除了使用任何条件简写。你能做的最好的是将isset()!= '' 测试合并到!empty()

$applicantName = !empty($params['applicant']['name']) ? $params['applicant']['name'] :
                    (!empty($simulationCustomer['fullname']) ? $simulationCustomer['fullname'] : 
                        ($simulationCustomer['name'] ?? ''));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-16
    • 2011-03-22
    • 1970-01-01
    • 1970-01-01
    • 2018-01-15
    • 2012-05-31
    • 1970-01-01
    相关资源
    最近更新 更多