我想在一个字符串中获取所有出现的 tds。目前我正在使用$tds = preg_split( '#(?=<td>)#', $toDisplayNotes );
但这并没有得到所有的 tds。是否可以生成如下所示的数组:
array {
[0] => "<td>hello</td>"
[1] => "<td align="right">world</td>"
[2] => "<td>another td</td>"
}
我想在一个字符串中获取所有出现的 tds。目前我正在使用$tds = preg_split( '#(?=<td>)#', $toDisplayNotes );
但这并没有得到所有的 tds。是否可以生成如下所示的数组:
array {
[0] => "<td>hello</td>"
[1] => "<td align="right">world</td>"
[2] => "<td>another td</td>"
}
使用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在这种情况下是更好的选择。
我的一个稍微相关的问题在这里