如何使用SimpleHTMLDOM获取表格中“申请接收”对应的td日期值?
搞定SimpleHtmlDom提取申请接收日期的方法
嘿,我懂你现在的烦恼——之前拿纯文本把所有td内容都捞出来了,现在得精准揪出“application received”对应的日期对吧?别慌,我给你两种靠谱的方案,你根据自己的表格结构选就行:
方案一:通过DOM结构精准定位(推荐,结构稳定时用)
如果你的表格里,“application received”和对应的日期是在相邻的单元格里(比如一个td是标签,下一个td是日期),那直接用SimpleHtmlDom的节点遍历就能搞定:
// 先获取表格里的所有申请条目行(根据你的实际HTML调整选择器,比如table tr.item) $applicationItems = $html->find('table tr'); foreach($applicationItems as $item) { // 找到包含"application received"文本的单元格 $labelCell = $item->find('td:contains("application received")', 0); if ($labelCell) { // 取这个单元格的下一个兄弟节点(就是存日期的那个td) $dateCell = $labelCell->next_sibling(); if ($dateCell) { // 清理文本,去掉多余空格,存入变量 $receivedDate = trim($dateCell->plaintext); // 这里可以把$receivedDate存到数组或者做后续处理 echo "提取到的申请接收日期:{$receivedDate}\n"; } } }
方案二:正则匹配文本(适合结构不固定但格式统一的情况)
如果“application received”和日期是在同一个单元格里(比如文本是“application received: Tue 27 Feb 2018”),那用正则表达式匹配日期就很方便:
$applicationItems = $html->find('table tr'); foreach($applicationItems as $item) { $itemText = $item->plaintext; // 匹配格式为"星期 日 月 年"的日期,忽略大小写 if (preg_match('/application received.*?(\w{3} \d{2} \w{3} \d{4})/i', $itemText, $matches)) { $receivedDate = $matches[1]; echo "提取到的申请接收日期:{$receivedDate}\n"; } }
小提示
- 记得根据你实际的HTML结构调整选择器,比如如果条目不是tr而是div,就把
find('table tr')改成对应的find('.application-item')之类的; - 如果日期格式有变化,比如是“27/02/2018”,那要调整正则表达式的匹配规则哦。
内容的提问来源于stack exchange,提问作者David
相关产品推荐
相关产品推荐

