我想在一个字符串中获取所有出现的 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);
$cells
var 是 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
在这种情况下是更好的选择。
我的一个稍微相关的问题在这里