【问题标题】:HTML table to php arrayHTML表格到php数组
【发布时间】:2012-01-16 23:01:39
【问题描述】:

-------------编辑------------

所以我将使用 DOM 方法。这是我目前所拥有的:

  <?php function getdata(){
    $contents = file_get_contents('internatdata.htm');
    //create a DOM based off of the string from the html table
     $DOM = new DOMDocument;
   $DOM->loadHTML($contents);

   //get all tr and td
   $items = $DOM->getElementsByTagName('tr');
   $tds = $DOM->getElementsByTagName('td');

   function tdrows($elements){
       $str = "";
       for ($ii =0; $ii < $elements->length; $ii++){
            $str .= $elements->item($ii)->nodeValue . ",";


           }
          return $str;
       }

   for ($i = 0; $i < $items->length; $i++){


       echo tdrows($tds) . "; <br />";

       }

    } 
?>

我遇到的问题是我只想从每个表格行中选择 td。我正在尝试使用嵌套循环来实现这一点。不幸的是,它正在打印页面上每个标签的文本多少次,因为有标签。我怎样才能得到它,所以它只打印每个 tr 的 td 而不是 dom 上的每个 td?


我需要使用 html 表作为我的数据源,因为我无权访问数据库。我想能够从 html 表中查询数据,我需要创建一个函数来将表转换为数组或多维数组。

我有我认为的基本想法,但我需要一些帮助来完成代码以返回基于 html 表的数组。

另外,如果除了将表格转换为数组之外,您还有其他更好的方法,请告诉我

这是我目前的想法:

 <?php
 function getdata(){

    $contents = file_get_contents('data.htm');
    //add delimiters (semicolon for a row and comma for a cell) ???

    $stripped = strip_tags($contents);

    //explode into an array based off the delimiters above ???


    } 
    ?>

【问题讨论】:

  • 最好的方法是使用 DOM 解析器,例如 php.net/manual/en/book.dom.php
  • “data.htm”是否只包含一个表格及其内容,还是包含更多元素的完整 html 页面?无论如何,您的代码仍然缺少与表格元素解析相关的所有部分。 IMO,我会寻找另一种方法:我不喜欢阅读 html 表格的想法。
  • @jap1968 data.htm 文件只包含我需要使用的html表
  • @jli 你能在上面看到我的编辑并提供任何建议......谢谢

标签: php


【解决方案1】:

我已更新您的编辑以修复它。

function tdrows($elements)
{
    $str = "";
    foreach ($elements as $element) {
        $str .= $element->nodeValue . ", ";
    }

    return $str;
}

function getdata()
{
    $contents = "<table><tr><td>Row 1 Column 1</td><td>Row 1 Column 2</td></tr><tr><td>Row 2 Column 1</td><td>Row 2 Column 2</td></tr></table>";
    $DOM = new DOMDocument;
    $DOM->loadHTML($contents);

    $items = $DOM->getElementsByTagName('tr');

    foreach ($items as $node) {
        echo tdrows($node->childNodes) . "<br />";
    }
}

getdata();

【讨论】:

  • 在函数中声明函数是个坏主意。调用 getData();第二次将导致致命错误Fatal error: Cannot redeclare tdrows()
  • 请随意修复它。
【解决方案2】:

使这更容易的一种方法是使用 dom 解析器 http://simplehtmldom.sourceforge.net/

您仍然需要将信息提取到一个数组中,但这将使逐个遍历元素变得更加容易。

【讨论】:

    【解决方案3】:

    您应该考虑使用 XML。

    比HTML表格简单多了,也足够了。

    示例:http://www.php.net/manual/en/simplexml.examples-basic.php

    【讨论】:

      猜你喜欢
      • 2016-04-12
      • 1970-01-01
      • 2019-12-14
      • 2014-05-17
      • 2014-07-08
      • 2013-08-03
      • 1970-01-01
      • 2015-08-08
      • 2013-08-19
      相关资源
      最近更新 更多