如何仅在变量$bar已设置时为JSON数组添加嵌套键foo?
解决方法
你原来的写法之所以没用,是因为$bar ?? null只是把未定义的$bar替换成null,但foo键依然会留在key2的数组里,而你需要的是完全不添加这个键。下面给两种实用的实现方式:
方法一:分步构建数组
先创建key2的基础结构,再根据条件追加foo键:
// 先初始化key2的基础数据 $key2Data = [ "key3" => "value3", "key4" => "value4" ]; // 仅当$bar已设置且是数组时,添加foo键 if (isset($bar) && is_array($bar)) { $key2Data["foo"] = $bar; } // 把完整数据加入json数组 $json[] = [ "key1" => "value1", "key2" => $key2Data ];
方法二:用数组合并简化写法
利用array_merge结合三元运算符,一次性构建数组:
$json[] = [ "key1" => "value1", "key2" => array_merge( [ "key3" => "value3", "key4" => "value4" ], // 条件满足时合并带foo的数组,否则合并空数组 (isset($bar) && is_array($bar)) ? ["foo" => $bar] : [] ) ];
两种方法都能实现:只有当$bar已定义且是数组类型时,key2里才会出现foo键,否则完全不包含这个键。
内容的提问来源于stack exchange,提问作者pileup
相关产品推荐
相关产品推荐

