我有一个非常普通的查询,显示存储在数据库表中的文章(field ='Article')...
while ($row = $stm->fetch())
{
$Content = $row['Article'];
}
echo $Content;
我想知道如何修改显示,以便每个段落都有一个数字ID。例如,第一段是[p id =“1”],第二段是[p id =“2”],依此类推。但是,如果最后一段显示为[p id =“Last”],那就更好了。
(抱歉,我忘了如何发布内联代码,所以我用括号替换了标签(例如<)。)
我的目标是简单地控制我的内容。例如,我想在某些页面上的第一段之后包含某些项目,我可能希望在一个特殊页面上包含第4段之前的某个特征。
ON EDIT ...以下建议的方法都不适合我,但可能是因为我没有正确实现它们;我不熟悉这两个例子中的代码。无论如何,我正在为此页面添加书签,以便我可以了解有关这些脚本的更多信息。
与此同时,我终于找到了一个正则表达式解决方案。 (我认为preg_replace是正则表达式的另一个词,对吗?)
这会在每个段落标记中插入一个数字ID:
$c = 1;
$r = preg_replace('/(<p( [^>]+)?>)/ie', '"<p\2 id=\"" . $c++ . "\">"', $Article);
$Article = $r;
这会将最后一个段落标记中的ID更改为“上一个”...
$c = 1;
$r = preg_replace('/(<p( [^>]+)?>)/ie', '"<p\2 id=\"" . $c++ . "\">"', $Article);
$r = preg_replace('/(<p.*?)id="'.($c-1).'"(>)/i', '\1id="Last"\2', $r);
$Article = $r;
答案 0 :(得分:0)
假设您的HTML格式正确,您可以使用SimpleXMLElement类来执行此操作:
$sxe = new SimpleXMLElement($row['Article']);
$i = 0;
foreach ($sxe->children() as $p) {
$p->addAttribute('id', $i);
}
$p->id = 'Last'; // to set the ID of the last paragraph
echo $sxe->__toString();
如果格式不正确,您可以改为使用DOMDocument类:
$dom = new DOMDocument;
$dom->loadHTML($row['Article']);
$i;
foreach ($dom->getElementsByTagName('p') as $p) {
$p->id = $id;
}
$p->id = 'Last';
echo $dom->saveHTML();