PHP三元运算符下Span标签闭合渲染异常,需仅为Cost值包裹Span标签的技术问询
问题修复:正确为Cost内容包裹Span标签
你的核心问题是三元运算符里的Span标签闭合逻辑错误——之前的修改只在价格分支添加了</span>,但免费分支没有闭合标签,导致HTML结构损坏。咱们调整一下逻辑,确保只有Cost相关的内容(Free或价格数值)被<span>完整包裹,Number部分完全独立在外。
正确的PHP代码实现
$json = '[{"Number":"333567","Cost":0},{"Number":"333568","Cost":7500},{"Number":"333569","Cost":7500}]'; $options = json_decode($json, true); $newArray = []; // 提前初始化数组,避免未定义变量警告 foreach ($options as $key => $value) { // 核心修正:把<span>放在三元运算符外部,确保两个分支都能正确闭合标签 $newArray[$value['Number']] = $value['Number'] . " <br /> <span>" . ($value['Cost'] / 100 == 0 ? 'Free' : '£' . ($value['Cost'] / 100)) . "</span>"; } echo '<br><br>'; echo json_encode($newArray); echo '<br>';
代码说明
- 初始化数组:先声明
$newArray = [],这是个好习惯,能避免PHP抛出未定义变量的警告。 - Span标签逻辑:
<span>标签在三元运算前打开,不管是免费还是付费场景,都会在三元运算结束后统一闭合</span>,确保HTML结构完整无缺。 - 最终输出结构:生成的内容完全符合需求:
- 免费项:
333567 <br /> <span>Free</span> - 付费项:
333568 <br /> <span>£75</span>
- 免费项:
这样既满足了“仅Cost内容被Span包裹”的要求,也彻底解决了标签未闭合的渲染异常问题。
内容的提问来源于stack exchange,提问作者Dragan Petrovic FSD
相关产品推荐
相关产品推荐

