You need to enable JavaScript to run this app. PHP中如何为包含<p>标签的字符串添加first、last类属性
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 03:36:03