在PHP中,如何将增量值附加到每个标记

时间:2011-01-24 09:09:41

标签: php

我在HTML文件中有一堆<P>标签,我想要附加一个唯一值,例如,我的HTML文件有以下内容(我已将此HTML文件转储到PHP变量中)使用file_get_contents):

<P> ... data ... </P>
<P> ... data ... </P>
<P> ... data ... </P>
<P> ... data ... </P>
<P> ... data ... </P>

我想改变它,所以它改为:

<P id='unique1'> ... data ... </P>
<P id='unique2'> ... data ... </P>
<P id='unique3'> ... data ... </P>
<P id='unique4'> ... data ... </P>
<P id='unique5'> ... data ... </P>

由于这是一个常规HTML文件,因此还有其他标记可能驻留在文件中(例如<HTML><HEAD><STYLE><BODY>,等,但我想在所有<P>标签

上附加一个唯一的ID

3 个答案:

答案 0 :(得分:2)

你可以这样做......

$Count = count($MyData);
for ($i = 0; $i < $Count; ++$i) {
    echo '<p id="id_' . $MyData[$i]->Id . '">... data ... </p>';
}

甚至这个......

$Count = count($MyData);
for ($i = 0; $i < $Count; ++$i) {
    echo '<p id="id_' . $i . '">... data ... </p>';
}

请记住,HTML id属性必须以字母开头,而不是数字!

答案 1 :(得分:2)

您需要编写一些HTML解析器。您可以将此作为起点:

<?php

$html = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head><title></title>
</head>
<body>

<P> ... data ... </P>
<P> ... data ... </P>
<P> ... data ... </P>
<P> ... data ... </P>
<P> ... data ... </P>

</body>
</html>';

$dom = new DOMDocument;
$dom->loadHTML($html);

$paragraphs = $dom->getElementsByTagName('p');
$count = 0;
foreach($paragraphs as $p){
    $count++;
    $p->setAttribute('id', 'unique' . $count);
}

echo $dom->saveHTML();

在任何情况下,解析HTML都不是一项简单的任务,在JavaScript中处理随机ID列表也不是一件容易的事。确保你有理由做到这一切。

答案 2 :(得分:0)

您可以使用像Smarty这样的模板引擎,您可以使用这样的标记循环遍历数据集合:

{foreach from=$myItemsArray item=currentItem}
    <p id='unique{$currentItem.id}'>{$currentItem.data}</p>
{/foreach}

只有当您的页面具有特定大小并且HTML文件中的数据可以从数据库生成时,这才是合理的。

如果您确实需要处理已存在的HTML文件,可以使用 REGEX 替换每个&lt; p&gt;标记为&lt; p id ='...'&gt;。在PHP中,函数是preg_replacepreg_replace_callback。我想如果你使用preg_replace,你需要在每次出现&lt; p&gt;时调用它。限制为1,因此您可以在每次通话后增加计数器,然后使用此计数器替换&lt; p&gt;与&lt; p id ='unique $ counter'&gt;。这是非常低效的,这就是为什么我建议使用preg_replace_callback,其中每次找到匹配时都会执行回调函数。我希望它能在这个回调函数中增加一个计数器(我没试过)。