PHP三元运算符?:使用是否正确?求正确写法
问题分析与解决方案
错误原因
你用的?:是PHP三元运算符的简写形式,逻辑是左侧表达式布尔值为真时返回左侧值,否则返回右侧值。但问题在于,get_field返回的“有值”可能是布尔假值(比如0、空字符串''、false),这些值会被?:判定为“无值”,从而错误地取右侧备选字段的值——哪怕你认为字段1实际是有值的。
举个例子:如果字段1的缩放值是0(合法的缩放级别),?:会把它当成假值,转而使用字段2的值,这就是你遇到部分记录得到NULL或字段2值的核心原因。
正确简写写法
推荐写法(PHP 7.0+)
使用PHP的空合并运算符??,它只会在左侧表达式的值为null(或未定义)时,才返回右侧值,完全匹配你“字段1有值就用,无值(null)才用字段2”的需求:
$fs_ski_resorts_data[$i]['fs_ski_resort_aa_zoom'] = get_field('fs_ski_resort_data_fs_aa_zoom') ?? get_field('fs_ski_resort_data_qgis_aa_zoom');
兼容低版本PHP写法(PHP < 7.0)
如果你的环境不支持空合并运算符,用完整的三元运算符明确判断是否为null:
$field1 = get_field('fs_ski_resort_data_fs_aa_zoom'); $fs_ski_resorts_data[$i]['fs_ski_resort_aa_zoom'] = $field1 !== null ? $field1 : get_field('fs_ski_resort_data_qgis_aa_zoom');
补充说明
空合并运算符??是专门为“当值为null时使用备选”的场景设计的,它不会像?:那样把0、空字符串这类合法值当成假值处理,完全契合你的业务需求。
内容的提问来源于stack exchange,提问作者spreaderman
相关产品推荐
相关产品推荐

