将 "first" 和 "last" 类 添加到 PHP 中包含一个或多个 <p> 标记的字符串
Add "first" and "last" classes to strings containing one or more <p> tags in PHP
我有两个要输出到页面的字符串
# string 1
<p>paragraph1</p>
# string 2
<p>paragraph1</p>
<p>paragraph2</p>
<p>paragraph3</p>
我想做的就是把它们变成这个
# string 1
<p class="first last">paragraph1</p>
# string 2
<p class="first">paragraph1</p>
<p>paragraph2</p>
<p class="last">paragraph3</p>
我基本上是在尝试复制 first-child
和 last-child
的 css 等价物,但我必须将它们物理添加到标签中,因为我无法使用 CSS.这些字符串是 MPDF 文档的一部分,<p>
标签不支持第 nth-child。
我可以很容易地遍历字符串,将 <p>
标签拆分成一个数组
$dom = new DOMDocument();
$question_paragraphs = array();
$dom->loadHTML($q['quiz_question']);
foreach($dom->getElementsByTagName('p') as $node)
{
$question_paragraphs[] = $dom->saveHTML($node);
}
但是一旦我有了那个数组,我就很难找到一种干净利落的方法来将 first
和 last
class 追加和添加到数组的任一端。我最终得到了很多丑陋的循环和感觉非常混乱的数组拼接。
我想知道是否有人有任何巧妙的方法来做到这一点?谢谢:)
编辑注意:这两个字符串在 while(array)
循环中输出,因为它们存储在数据库中。
您可以使用item()
方法对节点列表进行索引,这样您就可以将属性添加到列表中的第一个和最后一个元素。
$dom = new DOMDocument();
$question_paragraphs = array();
$dom->loadHTML($q['quiz_question']);
$par = $dom->getElementsByTagName('p');
if ($par->length == 1) {
$par->item(0)->setAttribute("class", "first last");
} elseif ($par->length > 1) {
$par->item(0)->setAttribute("class", "first");
$par->item($par->length - 1)->setAttribute("class", "last");
}
foreach($par as $node)
{
$question_paragraphs[] = $dom->saveHTML($node);
}
我有两个要输出到页面的字符串
# string 1
<p>paragraph1</p>
# string 2
<p>paragraph1</p>
<p>paragraph2</p>
<p>paragraph3</p>
我想做的就是把它们变成这个
# string 1
<p class="first last">paragraph1</p>
# string 2
<p class="first">paragraph1</p>
<p>paragraph2</p>
<p class="last">paragraph3</p>
我基本上是在尝试复制 first-child
和 last-child
的 css 等价物,但我必须将它们物理添加到标签中,因为我无法使用 CSS.这些字符串是 MPDF 文档的一部分,<p>
标签不支持第 nth-child。
我可以很容易地遍历字符串,将 <p>
标签拆分成一个数组
$dom = new DOMDocument();
$question_paragraphs = array();
$dom->loadHTML($q['quiz_question']);
foreach($dom->getElementsByTagName('p') as $node)
{
$question_paragraphs[] = $dom->saveHTML($node);
}
但是一旦我有了那个数组,我就很难找到一种干净利落的方法来将 first
和 last
class 追加和添加到数组的任一端。我最终得到了很多丑陋的循环和感觉非常混乱的数组拼接。
我想知道是否有人有任何巧妙的方法来做到这一点?谢谢:)
编辑注意:这两个字符串在 while(array)
循环中输出,因为它们存储在数据库中。
您可以使用item()
方法对节点列表进行索引,这样您就可以将属性添加到列表中的第一个和最后一个元素。
$dom = new DOMDocument();
$question_paragraphs = array();
$dom->loadHTML($q['quiz_question']);
$par = $dom->getElementsByTagName('p');
if ($par->length == 1) {
$par->item(0)->setAttribute("class", "first last");
} elseif ($par->length > 1) {
$par->item(0)->setAttribute("class", "first");
$par->item($par->length - 1)->setAttribute("class", "last");
}
foreach($par as $node)
{
$question_paragraphs[] = $dom->saveHTML($node);
}