如何简化为传入参数指定的第n个元素添加active类的代码?
优化分步流程渲染函数的实现方法
我编写了如下
draw_process函数:draw_process( $active_element ) { $step1 = $active_element == 1 ? 'active' : ''; $step2 = $active_element == 2 ? 'active' : ''; $step3 = $active_element == 3 ? 'active' : ''; return '<div class="process"> <div class="' . $step1 . '">Lorem Ipsum</div> <div class="' . $step2 . '">Lorem Ipsum</div> <div class="' . $step3 . '">Lorem Ipsum</div> </div>'; }请问是否有更简便的方法,为传入函数的参数所指定的第n个元素添加正确的
active类?
方法一:循环生成步骤元素
把步骤内容存入数组,通过循环动态渲染每个步骤,后续扩展步骤只需修改数组,无需重复编写判断逻辑:
function draw_process( $active_element ) { $steps = ['Lorem Ipsum', 'Lorem Ipsum', 'Lorem Ipsum']; $html = '<div class="process">'; foreach ($steps as $index => $content) { // 循环索引从0开始,所以加1匹配步骤序号 $class = ($index + 1 == $active_element) ? 'active' : ''; $html .= '<div class="' . $class . '">' . $content . '</div>'; } $html .= '</div>'; return $html; }
方法二:简化变量定义逻辑
如果不想调整结构,可直接把判断逻辑嵌入HTML拼接代码,省去单独定义$step1/$step2/$step3变量的冗余操作:
function draw_process( $active_element ) { return '<div class="process"> <div class="' . ($active_element == 1 ? 'active' : '') . '">Lorem Ipsum</div> <div class="' . ($active_element == 2 ? 'active' : '') . '">Lorem Ipsum</div> <div class="' . ($active_element == 3 ? 'active' : '') . '">Lorem Ipsum</div> </div>'; }
方法三:用HEREDOC提升代码可读性
HEREDOC语法可以避免HTML字符串转义引号的麻烦,让代码结构更直观,结合循环使用体验更好:
function draw_process( $active_element ) { $steps = ['Lorem Ipsum', 'Lorem Ipsum', 'Lorem Ipsum']; $html = <<<HTML <div class="process"> HTML; foreach ($steps as $index => $content) { $class = ($index + 1 == $active_element) ? 'active' : ''; $html .= <<<HTML <div class="$class">$content</div> HTML; } $html .= <<<HTML </div> HTML; return $html; }
内容的提问来源于stack exchange,提问作者stephan
相关产品推荐
相关产品推荐

