2015-05-31 64 views
0

我有一張表,我需要讀取td值並放入數組,以便我可以寫入數據庫。如何獲得所有td值並將其放入數組

表看起來是這樣的:

<table class="maintable" width="100%"> 
<tbody> 
    <tr> 
     <th width="100px">Client</th> 
     <th width="70px">version</th> 
     <th width="120px">ip</th> 
     <th width="110px">Connected</th> 
     <th width="60px">TotalEcm</th> 
     <th width="90px">AcceptedEcm</th> 
     <th width="90px">EcmOK</th> 
     <th width="50px">EcmTime</th> 
     <th>Last used share</th> 
    </tr> 
    <tr> 
     <td class="alt3" colspan="9"> CCcam 1 (338)</td> 
    </tr> 
    <tr id="Row1" class="alt1" onmouseover="setupdateRow(1)" onmouseout="setupdateRow(0)"> 
     <td> 
      <a href="/cccamclient?id=1">CLIENTNAME#1</a> 
     </td> 
     <td>CCcam 2.0.11<br>419a6380d63b8aec</td> 
     <td><img src="/flag_USA.gif" title="United States"> 63.15.11.121</td> 
     <td class="online">00d 00:08:16<table class="connect_data"> 
      <tbody> 
       <tr> 
        <td>Successful Login: 1</td> 
        <td>Aborted Connections: 0</td> 
        <td>Total Zapping: 0</td> 
        <td>Channel Freeze: 0</td> 
       </tr> 
      </tbody> 
      </table> 
     </td> 
     <td align="center">0</td> 
     <td> 
      <span style="float: right;">0%</span> 
     </td> 
     <td><span style="float: right;">0%</span></td> 
     <td align="center">-- ms</td> 
     <td> <span style="float:right;"> 
      <img title="disable" src="disable.png" onclick="imgrequest('/cccamclient?action=disable&amp;id=1',this);"> 
      <img title="Debug" src="debug.png" onclick="imgrequest('/cccamclient?action=debug&amp;id=1',this);"></span> 
     </td> 
    </tr> 
    <tr id="Row2" class="alt2" onmouseover="setupdateRow(2)" onmouseout="setupdateRow(3)"> 
     <td> 
      <a href="/cccamclient?id=2">CLIENTNAME#2</a> 
     </td> 
     <td>CCcam 2.0.11<br>419a6380d63b8aec</td> 
     <td><img src="/flag_AT.gif" title="Austria"> 69.75.11.121</td> 
     <td class="online">00d 00:08:16<table class="connect_data"> 
      <tbody> 
       <tr> 
        <td>Successful Login: 1</td> 
        <td>Aborted Connections: 0</td> 
        <td>Total Zapping: 0</td> 
        <td>Channel Freeze: 0</td> 
       </tr> 
      </tbody> 
      </table> 
     </td> 
     <td align="center">0</td> 
     <td> 
      <span style="float: right;">0%</span> 
     </td> 
     <td><span style="float: right;">0%</span></td> 
     <td align="center">-- ms</td> 
     <td> <span style="float:right;"> 
      <img title="disable" src="disable.png" onclick="imgrequest('/cccamclient?action=disable&amp;id=2',this);"> 
      <img title="Debug" src="debug.png" onclick="imgrequest('/cccamclient?action=debug&amp;id=1',this);"></span> 
     </td> 
    </tr> 
</tbody> 

所以我需要從數組呼應這個時候:

Array 
(
    [1] => Array 
     (
      [0] => CLIENTNAME#1 
      [1] => CCcam 2.0.11 
      [2] => 419a6380d63b8aec 
      [3] => /flag_USA.gif 
      [4] => United States 
      [5] -> 63.15.11.121 
      [6] -> 00d 00:08:16 
      [7] -> Successful Login: 1 
      [8] -> Aborted Connections: 0 
      [9] -> Total Zapping: 0 
      [10]-> Channel Freeze: 0 
      [11]-> 
     ) 
    [2] => Array 
     (
      [0] => CLIENTNAME#2 
      [1] => CCcam 2.0.11 
      [2] => 419a6380d63b8aec 
      [3] => /flag_AT.gif 
      [4] => Austria 
      [5] -> 69.75.11.121 
      [6] -> 00d 00:08:16 
      [7] -> Successful Login: 1 
      [8] -> Aborted Connections: 0 
      [9] -> Total Zapping: 0 
      [10]-> Channel Freeze: 0 
      [11]-> 
     ) 
) 

如何獲得預期的效果?我嘗試了$dom = new domDocument;,但我無法從表格中得到所需的數據。如果有人可以在jsfiddle上提供簡單的代碼。

+1

您需要建立更多規則。例如'​​CCcam 2.0.11
419a6380d63b8aec'在您的示例中被拆分爲兩條記錄,但您的規範是將每個td內容提取爲一個字符串。 –

+0

你能否提供一些代碼開始?因爲我不熟悉這個td我在谷歌上閱讀教程,但我沒有得到我所需要的。謝謝 – user2631534

+0

我不認爲你已經理解我以前的評論。你的規格是提取​​和之間的東西,但在你的樣例輸出中,你也分割了
。如果你能澄清? –

回答

1
$dom = new domDocument; 
@$dom->loadHTML(str_replace('<br>', urlencode('<br>'), $html)); 
$xpath = new DOMXPath($dom); 

這裏,直到你的代碼是真的:)然後修正

// set condition that attribute id is present 
//else some first tr will be received too 
$rows = $xpath->query('//tr[@id]'); 

$array_multics = array(); 
foreach ($rows as $row) { 
    $tmp = array(); 
// select what you want. If I missed something, add to xpath 
    foreach ($xpath->query('.//td/text() | .//td/a/text() | .//td/img/@src', $row) as $col) { 
    $value = trim($col->nodeValue); 
//exclude `-- ms` and many empty values 
    if(!empty($value) && (strpos($value, '-- ms') === false)) 
// split <br> which comes from dom as `%3Cbr%3` 
     foreach (explode('%3Cbr%3', $value) as $val) 
     $tmp[] = $val; // here all you want 
    } 
    $array_multics[] = $tmp; 
} 

陣列將數字作爲問題被索引。

+0

謝謝..這很好,,,,我需要....再次感謝:) – user2631534

+0

不客氣 – splash58

0

如果你看上面的註釋中發佈的代碼示例 - http://codepad.org/uOBcv6W8 - 你的HTML字符串引用是錯誤的,那麼問題就很明顯了。

您可以使用heredoc(現在稱爲newdoc)語法引用帶有嵌入式引號的HTML,例如, (從https://php.net/manual/en/language.types.string.php#language.types.string.syntax.nowdoc

<?php 
$str = <<<'EOD' 
Example of string 
spanning multiple lines 
using nowdoc syntax. 
EOD; 
+0

感謝以上解決方案工程非常好。 – user2631534

相關問題