如何用PHP获取含指定字符串的<td>对应的后续<td>值
使用simple_html_dom提取表格指定行的列值,及类SQL替代方案
一、simple_html_dom的实现方法
你可以直接遍历表格的每一行,检查第一列的文本是否包含目标时间字符串,匹配成功后直接提取对应行的第二、第三列内容。代码示例如下:
// 假设已通过simple_html_dom加载目标HTML到$html对象 $targetTime = '00:30'; // 遍历表格的所有行 foreach ($html->find('tr') as $row) { $tdElements = $row->find('td'); // 确保当前行有至少3个td,避免索引越界 if (count($tdElements) >= 3) { // 去掉空白后检查第一列是否包含目标时间 if (strpos(trim($tdElements[0]->plaintext), $targetTime) !== false) { // 提取第二、第三列的文本内容 $column2 = trim($tdElements[1]->plaintext); $column3 = trim($tdElements[2]->plaintext); // 输出或使用结果 echo "第二列值:{$column2},第三列值:{$column3}"; // 如果只需要第一个匹配项,可在此处break终止循环 break; } } }
关键点说明:
trim()用于去除td文本中的多余空格、换行符,避免匹配失败strpos()用来检测第一列是否包含目标时间字符串,注意用!== false判断(避免目标字符串在开头时返回0被误判)- 先判断
count($tdElements) >=3,防止某些行列数不足导致数组索引错误
二、类SQL风格的查询方案
如果你偏好类SQL的条件查询方式,可以使用PHP原生的DOMXPath,它支持通过表达式直接定位符合条件的元素,无需手动遍历:
$htmlContent = file_get_contents('目标网页地址'); // 或直接传入HTML字符串 $dom = new DOMDocument(); @$dom->loadHTML($htmlContent); // @符号忽略HTML解析时的非致命警告 $xpath = new DOMXPath($dom); $targetTime = '00:30'; // XPath表达式:匹配所有行中第一列包含目标时间的,然后取该行的第二、第三列 $query = "//tr[contains(normalize-space(td[1]), '$targetTime')]/td[position()=2 or position()=3]"; $resultNodes = $xpath->query($query); if ($resultNodes->length >= 2) { $column2 = trim($resultNodes->item(0)->nodeValue); $column3 = trim($resultNodes->item(1)->nodeValue); echo "第二列值:{$column2},第三列值:{$column3}"; }
XPath表达式解释:
normalize-space(td[1]):去除第一列td文本的多余空白,确保匹配准确contains(..., '$targetTime'):判断第一列是否包含目标时间,类似SQL的LIKE '%xxx%'td[position()=2 or position()=3]:指定提取该行的第二、第三列,类似SQL的SELECT col2, col3
另外,也可以使用QueryPath这类库,它支持CSS选择器+类SQL的链式查询语法,但原生DOMXPath已经能满足需求,无需额外安装依赖。
内容的提问来源于stack exchange,提问作者Wilf
相关产品推荐
相关产品推荐

