如何在正确的匹配数组中获取html表?

问题描述 投票:-1回答:1

我是PHP DOM解析器的新手,这也是我第一次在Stack Overflow上提问。如果我给您造成了任何问题,对不起。

目前,我可以使用PHP中的DOM解析器来获取数组,但是在单独的数组中,有人可以教我如何做吗?

这是我获取HTML表格数据的编码。

  $DOM = new DOMDocument();
  $DOM->loadHTML($htmlContent);

  $Header = $DOM->getElementsByTagName('th');

//#Get header name of the table
  foreach ($Header as $NodeHeader)
  { 
  $Header=$NodeHeader->c14n();
  $thDom= new DOMDocument();
  $thDom->loadHtml($Header);
  $aDataTableHeaderHtml[] = $NodeHeader->textContent;
  }
  print_r($aDataTableHeaderHtml);

  $datacell = [];
  $trs = $DOM->getElementsByTagName('tr'); //Get table row
  foreach ($trs as $tr) 
  {
      $trHtml = $tr->c14n();
      $trDom = new DOMDocument();
      $trDom->loadHTML($trHtml);
      $td = $trDom->getElementsByTagName('td'); //Get table data
      $array = [];
      foreach ($td as $cells) 
      {
          $array[] = $cells->textContent;
      }
      $datacell[] = $array;
  }
print_r($datacell);

<table class="Stats-table">
  <tr class='TblHdr'>
    <th><b></b></td>
      <th><b>USD</b></th>
      <th><b>GBP</b></th>
      <th><b>EUR</b></th>
      <th><b>JPY100</b></th>
      <th><b>CHF</b></th>
      <th><b>AUD</b></th>
      <th><b>CAD</b></th>
      <th><b>SGD</b></th>
      <th><b>HKD100</b></th>
  </tr>
  <tr>
    <td>3/2/2020</td>
    <td>4.1155</td>
    <td>5.4152</td>
    <td>4.5606</td>
    <td>3.7915</td>
    <td>4.2694</td>
    <td>2.7547</td>
    <td>3.1079</td>
    <td>3.0082</td>
    <td>52.9935</td>
  </tr>
  <tr>
    <td>4/2/2020</td>
    <td>4.1170</td>
    <td>5.3521</td>
    <td>4.5524</td>
    <td>3.7877</td>
    <td>4.2582</td>
    <td>2.7644</td>
    <td>3.0976</td>
    <td>3.0031</td>
    <td>52.9903</td>
  </tr>
  <tr>

以下是我从DOM解析器得到的结果。该数组是获取表头的结果。

Array
(
    [0] => 

    [1] => USD
    [2] => GBP
    [3] => EUR
    [4] => JPY100
    [5] => CHF
    [6] => AUD
    [7] => CAD
    [8] => SGD
    [9] => HKD100
    [10] => 
    [11] => THB100
    [12] => PHP100
    [13] => TWD100
    [14] => KRW100
    [15] => IDR100
    [16] => SAR100
    [17] => SDR
    [18] => CNY
    [19] => BND
    [20] => 
    [21] => VND100
    [22] => KHR100
    [23] => NZD
    [24] => MMK100
    [25] => INR100
    [26] => AED100
    [27] => PKR100
    [28] => NPR100
    [29] => EGP
) 

下面的数组是显示行数据。

Array
(
    [0] => Array
        (
        )

    [1] => Array
        (
            [0] => 3/2/2020
            [1] => 4.1155
            [2] => 5.4152
            [3] => 4.5606
            [4] => 3.7915
            [5] => 4.2694
            [6] => 2.7547
            [7] => 3.1079
            [8] => 3.0082
            [9] => 52.9935
        )

    [2] => Array
        (
            [0] => 4/2/2020
            [1] => 4.1170
            [2] => 5.3521
            [3] => 4.5524
            [4] => 3.7877
            [5] => 4.2582
            [6] => 2.7644
            [7] => 3.0976
            [8] => 3.0031
            [9] => 52.9903
        )

    [3] => Array
        (
            [0] => 5/2/2020
            [1] => 4.1210
            [2] => 5.3668
            [3] => 4.5471
            [4] => 3.7654
            [5] => 4.2504
            [6] => 2.7767
            [7] => 3.1006
            [8] => 2.9849
            [9] => 53.0670
        )

我希望数组与正确的1匹配。

示例:

Array
        (
            [] => 3/2/2020
            [USD] => 4.1155
            [GBP] => 5.4152
            [EUR] => 4.5606
            [JPY100] => 3.7915
            [CHF] => 4.2694
            [AUD] => 2.7547
            [CAD] => 3.1079
            [SGD] => 3.0082
            [KHKD100] => 52.9935
        )
php dom html-parsing
1个回答
0
投票

array_combine将根据两个数组构造一个数组。第一个用于键,第二个用于值。

array_combine

输出:

$combined = array_combine($aDataTableHeaderHtml, $datacell[1]);
print_r($combined);

您那里存在一些空格问题,建议您在将值转储到数组之前对它们使用Array ( [ ] => 3/2/2020 [USD] => 4.1155 [GBP] => 5.4152 [EUR] => 4.5606 [JPY100] => 3.7915 [CHF] => 4.2694 [AUD] => 2.7547 [CAD] => 3.1079 [SGD] => 3.0082 [HKD100] => 52.9935 )

© www.soinside.com 2019 - 2024. All rights reserved.