PHP中echo结合短三元运算符的用法及页面类型选项实现
问题修正:PHP echo中正确使用短三元运算符生成选项列表
核心问题分析
- 运算符优先级错误:短三元运算符(
?:)的优先级低于字符串拼接符(.),如果不包裹括号,代码会先执行字符串拼接再做条件判断,完全偏离预期逻辑。 - 循环逻辑冗余:原代码遍历数据库结果时重复输出相同的
blog和page选项,会导致下拉框出现大量重复项,不符合需求。
修正后的代码示例
方式1:先赋值再输出(可读性更强)
public function listLayoutOption($id=0,$table,$column,$condition){ // 获取数据库数据,取第一条记录作为当前选中项 $data = $this->db->get("SELECT * FROM {$table} WHERE {$column}=?",array($condition)); $selectedType = !empty($data) ? $data[0]->post_type : ''; echo '<option value="0">Şablon Seçiniz</option>'; // 生成Blog选项 $selectedBlog = ($selectedType === "blog") ? 'selected' : ''; echo "<option {$selectedBlog} value='blog'>Blog Şablonu</option>"; // 生成Sayfa选项 $selectedPage = ($selectedType === "page") ? 'selected' : ''; echo "<option {$selectedPage} value='page'>Sayfa Şablonu</option>"; }
方式2:echo中直接使用带括号的三元运算符
public function listLayoutOption($id=0,$table,$column,$condition){ $data = $this->db->get("SELECT * FROM {$table} WHERE {$column}=?",array($condition)); $selectedType = !empty($data) ? $data[0]->post_type : ''; echo '<option value="0">Şablon Seçiniz</option>'; // 必须用括号包裹三元表达式,确保先执行条件判断 echo '<option ' . ($selectedType === "blog" ? "selected" : "") . ' value="blog">Blog Şablonu</option>'; echo '<option ' . ($selectedType === "page" ? "selected" : "") . ' value="page">Sayfa Şablonu</option>'; }
关键说明
- 用括号包裹三元表达式
($selectedType === "blog" ? "selected" : ""),确保条件判断优先执行,再将结果拼接到字符串中。 - 假设数据库查询返回的是当前已选中的布局类型,因此只需要取第一条记录即可,无需循环遍历所有结果重复生成选项。
内容的提问来源于stack exchange,提问作者Muhammet Sinan Korkut
相关产品推荐
相关产品推荐

