首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >预分割表所有tds

预分割表所有tds
EN

Stack Overflow用户
提问于 2013-09-09 11:10:55
回答 1查看 299关注 0票数 0

我想得到字符串中所有的tds。目前我正在使用$tds = preg_split( '#(?=<td>)#', $toDisplayNotes );

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

代码语言:javascript
复制
array {
  [0] => "<td>hello</td>"
  [1] => "<td align="right">world</td>"
  [2] => "<td>another td</td>"
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-09 11:25:15

使用DOMDocument类,您可以很容易地获得如下所有单元格:

代码语言:javascript
复制
$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 (包括标记)。这很简单:“

代码语言:javascript
复制
$markup = array();
foreach($cells as $cell)
{
    $markup[] = $dom->saveXML($cell);
}

边注:

也许for循环比foreach更具有性能。我还没有测试/比较这两种方法,但是如果您看到上面的方法和这个方法有什么不同,您可以尝试:

代码语言:javascript
复制
$markup = array();
for($i=0, $j = $cells->length;$i<$j;$i++)
{
    $markup[] = $dom->saveXML($cells->item($i));
}

我使用saveXML而不是saveHTML的原因很简单:saveHTML将生成一个有效的DOM (包括打开<html>标记和您拥有的东西)。不是你想要的。这就是为什么在这种情况下,saveXML是更好的选择。

一个与我的here稍有关联的问题

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18696920

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档