我想得到字符串中所有的tds。目前我正在使用$tds = preg_split( '#(?=<td>)#', $toDisplayNotes );
但这并不能得到所有的tds。是否可以生成如下所示的数组:
array {
[0] => "<td>hello</td>"
[1] => "<td align="right">world</td>"
[2] => "<td>another td</td>"
}发布于 2013-09-09 11:25:15
使用DOMDocument类,您可以很容易地获得如下所有单元格:
$dom = new DOMDocument;
$dom->loadHTML($htmlString);
$cells = $dom->getElementsByTagName('td');
$contents = array();
foreach($cells as $cell)
{
$contents[] = $cell->nodeValue;
}
var_dump($contents);$cells变量是一个DOMNodeList,因此它有一些您可能可以使用的方法。$cell变量将在每次迭代中分配一个特定的DOMNode实例,该实例具有各种可能对用例有用的方法/属性(如getAttribute)。
但是,考虑到您的问题,您将需要数组中的外部html (包括标记)。这很简单:“
$markup = array();
foreach($cells as $cell)
{
$markup[] = $dom->saveXML($cell);
}边注:
也许for循环比foreach更具有性能。我还没有测试/比较这两种方法,但是如果您看到上面的方法和这个方法有什么不同,您可以尝试:
$markup = array();
for($i=0, $j = $cells->length;$i<$j;$i++)
{
$markup[] = $dom->saveXML($cells->item($i));
}我使用saveXML而不是saveHTML的原因很简单:saveHTML将生成一个有效的DOM (包括打开<html>标记和您拥有的东西)。不是你想要的。这就是为什么在这种情况下,saveXML是更好的选择。
一个与我的here稍有关联的问题
https://stackoverflow.com/questions/18696920
复制相似问题