PHP中如何为包含<p>标签的字符串添加first、last类属性
解决方案
推荐直接操作DOM节点完成类名添加,不需要额外拆分数组拼接,逻辑简洁无冗余:
$dom = new DOMDocument(); $dom->loadHTML($q['quiz_question']); $p_nodes = $dom->getElementsByTagName('p'); $p_count = $p_nodes->length; if ($p_count > 0) { // 处理首个p标签 $first_node = $p_nodes->item(0); $origin_class = $first_node->hasAttribute('class') ? $first_node->getAttribute('class') . ' ' : ''; $first_node->setAttribute('class', $origin_class . 'first'); // 处理末尾p标签 $last_node = $p_nodes->item($p_count - 1); $origin_class = $last_node->hasAttribute('class') ? $last_node->getAttribute('class') . ' ' : ''; $last_node->setAttribute('class', $origin_class . 'last'); } // 输出处理后的完整HTML $processed_content = ''; foreach ($dom->getElementsByTagName('body')->item(0)->childNodes as $child_node) { $processed_content .= $dom->saveHTML($child_node); } echo $processed_content;
如果要基于你已拆分好的$question_paragraphs数组处理,可以用以下极简写法:
$p_count = count($question_paragraphs); if ($p_count === 1) { // 单个p标签同时加first和last类 $question_paragraphs[0] = preg_replace('/^<p/i', '<p class="first last"', $question_paragraphs[0]); } elseif ($p_count > 1) { // 多个p标签分别给首尾加类 $question_paragraphs[0] = preg_replace('/^<p/i', '<p class="first"', $question_paragraphs[0]); $question_paragraphs[$p_count - 1] = preg_replace('/^<p/i', '<p class="last"', $question_paragraphs[$p_count - 1]); } // 循环输出或拼接后输出均可 echo implode('', $question_paragraphs);
两种方案都不需要额外的冗余循环,符合你在while循环中处理数据库读取内容的需求。
内容的提问来源于stack exchange,提问作者Maurice
相关产品推荐
相关产品推荐

