You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP:能否用三元运算符向数组追加无内容以维持原数组状态?

实现需求的解决方案

首先明确:直接用$new_arr[] = 三元表达式的方式无法实现目标,因为不管三元的else分支是什么,[]=都会强制向数组追加元素(哪怕是空数组)。要达成「存在指定键则追加对应值,不存在则不操作」的效果,可通过以下方式利用三元运算符实现:

方法1:结合数组合并使用三元运算

将三元运算的结果设为「包含目标值的数组」或「空数组」,再合并到新数组中。空数组合并后不会对原数组产生任何影响,代码示例:

<?php
$source_arr = ["Car" => "Volvo", "City" => "Stockholm", "Country" => "Sweden"];
$new_arr    = [];

// 存在键则合并含对应值的数组,否则合并空数组
$new_arr = array_merge($new_arr, key_exists("Car", $source_arr) ? [$source_arr["Car"]] : []);
$new_arr = array_merge($new_arr, key_exists("State", $source_arr) ? [$source_arr["State"]] : []);

echo "<pre>";
var_export($new_arr);
echo "</pre>";
?>

执行后输出符合预期:

array (
  0 => 'Volvo',
)

方法2:利用逻辑与的短路特性(非严格三元,但更简洁)

如果不严格限定必须用三元运算符,还可以用逻辑与&&的短路特性:当条件为真时才执行后续的追加操作,条件为假时直接跳过,代码示例:

<?php
$source_arr = ["Car" => "Volvo", "City" => "Stockholm", "Country" => "Sweden"];
$new_arr    = [];

key_exists("Car", $source_arr) && $new_arr[] = $source_arr["Car"];
key_exists("State", $source_arr) && $new_arr[] = $source_arr["State"];

echo "<pre>";
var_export($new_arr);
echo "</pre>";
?>

这种写法比三元更直观,完全匹配需求。

原代码不符合预期的原因

原代码中$new_arr[] = (...) ? ... : []的逻辑是:无论条件是否成立,都会执行$new_arr[]的追加操作,只是追加的内容不同——条件不成立时会追加一个空数组元素,这就是结果里出现空数组项的原因。

内容的提问来源于stack exchange,提问作者Gowire

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 02:50:23