PHP三元表达式能否添加多条件实现ID属性多关键词匹配
问题解答
完全可以在现有三元表达式基础上叠加多层条件实现多关键词匹配,你可以根据后续关键词数量选择两种实现方案:
方案1:嵌套三元表达式(适合关键词数量≤3的场景)
三元运算符支持嵌套,只要用括号明确判断优先级即可,不会影响原有i.p. rating的判断逻辑,示例代码如下(将你的新增关键词和对应输出值替换为你实际的业务内容即可):
if(!$customLength){ ?> <th class="sku-label-value download-url-construct <?=$columnClassParent ?>"> <span data-option-id="<?=$values['option_id']?>" id="ns_code_<?= (stripos($title, 'i.p. rating') !== false) ? 'iprating' : (stripos($title, '你的新增关键词') !== false ? '对应输出值' : $title) ?>" data-code-sku="<?=$dataCodeSku ?>"> <?=$values['sku'] ?></span> </th> <?php }
逻辑执行顺序:
- 优先判断
$title是否包含i.p. rating,匹配成功输出iprating - 不匹配的话进入第二个判断,检查是否包含新增关键词,匹配成功输出对应自定义值
- 所有规则都不匹配,输出原始
$title
方案2:映射表匹配(适合后续还要新增更多关键词的场景)
如果后续还有新增关键词的需求,更推荐用映射数组实现,代码可读性和可维护性更高,避免嵌套三元过长容易出错的问题:
<?php // 提前定义关键词和输出值的映射规则,后续加规则直接改这个数组就行 $titleIdMap = [ 'i.p. rating' => 'iprating', 'warranty period' => 'warranty', // 示例新增规则 'material type' => 'material' // 可随时加更多规则 ]; $idSuffix = $title; foreach ($titleIdMap as $keyword => $replaceVal) { if (stripos($title, $keyword) !== false) { $idSuffix = $replaceVal; break; // 匹配到第一条规则就终止,避免冲突 } } if(!$customLength){ ?> <th class="sku-label-value download-url-construct <?=$columnClassParent ?>"> <span data-option-id="<?=$values['option_id']?>" id="ns_code_<?= $idSuffix ?>" data-code-sku="<?=$dataCodeSku ?>"> <?=$values['sku'] ?></span> </th> <?php } ?>
内容的提问来源于stack exchange,提问作者bigbrotherx
相关产品推荐
相关产品推荐

