0

我想在一个字符串中获取所有出现的 tds。目前我正在使用$tds = preg_split( '#(?=<td>)#', $toDisplayNotes );

但这并没有得到所有的 tds。是否可以生成如下所示的数组:

array {
  [0] => "<td>hello</td>"
  [1] => "<td align="right">world</td>"
  [2] => "<td>another td</td>"
}
4

1 回答 1

0

使用DOMDocument该类,您可以轻松获取所有单元格,如下所示:

$dom = new DOMDocument;
$dom->loadHTML($htmlString);
$cells = $dom->getElementsByTagName('td');
$contents = array();
foreach($cells as $cell)
{
    $contents[] = $cell->nodeValue;
}
var_dump($contents);

$cellsvar 是 a ,因此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在这种情况下是更好的选择。
我的一个稍微相关的问题在这里

于 2013-09-09T11:25:15.667 回答