Php 如何在没有ID的HTML表中选择特定列?

Php 如何在没有ID的HTML表中选择特定列?,php,foreach,web-scraping,simple-html-dom,Php,Foreach,Web Scraping,Simple Html Dom,我使用的是SimpleHTMLDOM,我有两个具有相同列的表,我需要提取列标题 下面是我用来获取所有数据的方法,但现在我只需要选择月份和相应的列标题(一月、二月等) $r_tables=$dom->find('table'); foreach($r_表为$table){ $r_cells=$table->find('td'); foreach($r\u单元格作为$cell){ echo$cell->纯文本。“”; } } 一种简陋的方法是 $i = 0; foreach($r_tables a

我使用的是SimpleHTMLDOM,我有两个具有相同列的表,我需要提取列标题

下面是我用来获取所有数据的方法,但现在我只需要选择月份和相应的列标题(一月、二月等)

$r_tables=$dom->find('table');
foreach($r_表为$table){
$r_cells=$table->find('td');
foreach($r\u单元格作为$cell){
echo$cell->纯文本。“
”; } }
一种简陋的方法是

$i = 0;
foreach($r_tables as $table) {
$r_cells = $table->find('td');

foreach($r_cells as $cell) {
  if($i == 0) {    
    echo $cell->plaintext.'<br />';
  }    
}
$i++;
$i=0;
foreach($r_表为$table){
$r_cells=$table->find('td');
foreach($r\u单元格作为$cell){
如果($i==0){
echo$cell->纯文本。“
”; } } $i++;

}我想你要找的是

$tables = $dom->find('table');

foreach($tables as $table) {
    $r_cells = $table->find('tr');
    $i = 0;
    foreach($r_cells as $row) {
        $cell = $row->find('td');
        if ($i == 0) {
            foreach($cell as $td) { 
                echo $td.'<br />';
            }
        }  
    $i++;  
    }
}
$tables=$dom->find('table');
foreach($tables作为$table){
$r_cells=$table->find('tr');
$i=0;
foreach($r\u单元格作为$row){
$cell=$row->find('td');
如果($i==0){
foreach($单元格为$td){
echo$td.“
”; } } $i++; } }
从第一个表的第一个tr中查找td:

$tds = $dom->find('table', 0)->find('tr', 0)->find('td');
将每个td的文本映射到一个数组中:

$headers = array_map(function($td){return $td->text();}, $tds);

这应该满足您的要求(如果我理解正确):

foreach($r\u表为$table){
$r_cells=$table->find('td');
echo$r_单元格[0]->纯文本。“
”;; }
你就不能只做
echo$r\u单元格[0]->纯文本?(从未使用过SimpleHTMLDom)谢谢@herb。这是可行的,但它也显示了第二行,这是我不想要的。我应该如何删除它并只保留月份行?我需要查看$table->find('td')后面的代码,但我假设$r\u单元格是一个表row@herb你能澄清一下你到底需要看到什么吗?我需要看看$table->find('td')对象方法背后是什么。它是否一次返回一行。我在想,因为在你把它划分成单独的单元之前,你得到了所有你可能试图执行的东西,比如$table->find('tr'),再次感谢@herb。这是可行的,但结果重复了两次。。。这可能是因为我有两个具有相同列名的表吗?另外,如果我想在一个html表中组织所有这些内容,我将如何进行呢?我对此有点陌生,但您能否澄清一下您是如何做到这一点的?它将帮助我找出剩下的。@KPO-是,foreach($tables as$table)行循环遍历页面上的每个表
$headers = array_map(function($td){return $td->text();}, $tds);
foreach($r_tables as $table) {
    $r_cells = $table->find('td');

    echo $r_cells[0]->plaintext . '<br />';;
}