Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用简单HTMLDOM只能找到第一个表_Php_Html_Simple Html Dom - Fatal编程技术网

Php 使用简单HTMLDOM只能找到第一个表

Php 使用简单HTMLDOM只能找到第一个表,php,html,simple-html-dom,Php,Html,Simple Html Dom,所以我使用简单的HTMLDOM,从我的表中读取所有id 我的桌子如下所示: xxxxxxxxx标题xxxxxxxxxxxxxxxxxxxxxxx SWxxxxxxxxxx SW XXXXXXXXX标题XXXXXXXXXXXXXxxxxxxxxxx SWxxxxxxxxxx SW 第行中传递给find()方法的第二个参数$table=$html->find('table',0)告诉这个方法只返回第一个找到的元素(第二个参数是结果数组中元素的索引),所以基本上要求findmethod只返回第一个表

所以我使用简单的HTMLDOM,从我的表中读取所有id

我的桌子如下所示:

xxxxxxxxx标题xxxxxxxxxxxxx

xxxxx

xxxxx SW

xxxxx

xxxxx SW XXXXXXXXX标题XXXXXXXXXXXXX

xxxxx

xxxxx SW

xxxxx

xxxxx SW
行中传递给
find()
方法的第二个参数
$table=$html->find('table',0)
告诉这个方法只返回第一个找到的元素(第二个参数是结果数组中元素的索引),所以基本上要求
find
method只返回第一个表。为了避免这种情况,您需要省略第二个参数。大概是这样的:

$html=file_get_html('../Test/reqID/htmlfileID.html');
//$tables将是所有找到的表的数组
$tables=$html->find('table');
//您还需要遍历所有表
foreach($tables作为$table){
foreach($table->find('tr')作为$row){
如果(是数字($row->find('td',0)->纯文本)){
$reqIDs[]=$row->find('td',0)->纯文本;
}         
} 
}

为什么在“$html->find('table',0);”中添加0。因此,我认为它只选择第一个表。请避免将代码(HTML部分)作为图像。它将阻止读者使用与您相同的输入运行您的代码,因此他们无法提供帮助。谢谢@Nima,但它为什么会在表4中间停止?仍然有一些id为的表,在问题的编辑字段中写了一些。@Nalinnishan这并不意外。所需的更改非常小,两个人可能会想出相同的解决方案:)我将其更改为
$tables=$html->find('table')
,但它仍然停留在表4上。@Mads他已经告诉你一个逻辑并做了一些实验。。我认为问题是因为您再次在
$row->find('td',0)
中使用了0,这意味着您只选择了第一行。删除0并对每一行使用foreach。但我只需要td中的0,td中的所有其他内容都不是我需要的。我只是不明白为什么在读表4中的id时会“粗鲁”,然后不读表4后面的id。