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

PHP三元运算符布尔判断两种场景的结果差异咨询

问题分析与解决方案

嘿,我来帮你搞明白这两个场景输出差异的原因~

首先你要明确自己的核心需求:当描述长度超过20字符时,截断并添加"...";长度≤20时显示原内容。我们来逐个拆解两个场景的逻辑:

场景1的逻辑反转问题

场景1的三元表达式是:

$art = strlen($item["description"]) > 20 ? $item["description"] : substr($item["description"], 0, 20) . "...";

这个表达式的实际逻辑和你的需求完全相反:

  • 如果长度大于20,直接返回原内容(不做截断)
  • 如果长度≤20,才执行截断并添加"..."

当strlen($item["description"]) = 50时,50>20为真,所以直接输出了完整的原内容,自然看不到你想要的"..."。

场景2的逻辑是符合预期的

场景2的三元表达式是:

$cut = strlen($item["description"]) < 20 ? $item["description"] : substr($item["description"], 0, 20) . "...";

它的逻辑完美匹配你的需求:

  • 如果长度小于20,返回原内容
  • 如果长度≥20,就截断前20个字符并添加"..."

当长度是50时,50<20为假,所以执行截断逻辑,输出你预期的带"..."的内容。

优化建议

如果想让代码更易读、更不容易出错,可以把条件写得和需求描述完全对应,用if-else替代三元表达式:

$description = $item["description"];
if (strlen($description) > 20) {
    $art = substr($description, 0, 20) . "...";
} else {
    $art = $description;
}
echo $art;

另外如果你的描述包含中文、日文等多字节字符,建议用mb_strlen()和mb_substr()来处理,避免截断后出现乱码问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:35:48