我希望在字符串中出现所有tds。目前我正在使用$tds = preg_split( '#(?=<td>)#', $toDisplayNotes );
但这并没有得到所有的tds。是否可以生成如下所示的数组:
array {
[0] => "<td>hello</td>"
[1] => "<td align="right">world</td>"
[2] => "<td>another td</td>"
}
答案 0 :(得分:0)
使用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是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