PHP Simple HTML DOM Parser查找特定文本

时间:2013-04-01 10:22:15

标签: php simple-html-dom

尝试从这种创建不佳的HTML格式中获取数据

http://www.weather.gov.sg/lws/zoneInfo.do

我只需要获取3个地方的数据,例如勿洛,城市和加东。 如何将数据存储在数组中?

这就是我为商店提供的前5行所做的,这不是我想要的。

$row_counter='0';
while($row_counter<5)
{
$ret['Name'][] = $html->find('.FORM1', $row_counter)->innertext;
$ret['Area'][] = $html->find('.FORM1', $row_counter)->next_sibling()->innertext;
$ret['Alert'][] = $html->find('.FORM1', $row_counter)->next_sibling()->next_sibling()->innertext;
$ret['From'][] = $html->find('.FORM1', $row_counter)->next_sibling()->next_sibling()->next_sibling()->innertext;
$ret['Till'][] = $html->find('.FORM1', $row_counter)->next_sibling()->next_sibling()->next_sibling()->next_sibling()->innertext;
$row_counter++;
}

我能够成功存储整行和所有列的数据。 搜索特定名称的最有效方法是什么,例如Bedok和它旁边的列一样,如next_sibling?

感谢。

1 个答案:

答案 0 :(得分:3)

不容易。先尝试一下然后再问。 (:

<?php
include 'simple_html_dom.php';
$html = file_get_html('http://www.weather.gov.sg/lws/zoneInfo.do');

$n = 0;
$table = $html->find('table',3)->find('table',0)->find('table',0)->find('table',0)->find('table',3)->find('table',0);

$i = -3;
$rows = $table->find('tr');
$holder = array();

foreach($rows as $element){
    $i++;
    if($i < 0) continue;

    $holder[$i]['name'] = $element->find('td',0)->plaintext;
    $holder[$i]['zone_or_school'] = $element->find('td',1)->plaintext;
    $holder[$i]['risk'] = $element->find('td',2)->plaintext;
    $holder[$i]['from'] = $element->find('td',3)->plaintext;
    $holder[$i]['till'] = $element->find('td',4)->plaintext;
}

var_dump($holder);
?>

如果您想获取特定数据,则可以将其过滤掉:

foreach($holder as $key => $val)
{
if($holder[$key]['name']=='Bedoc')
$my_data = $holder[$key];
}

此代码未被删除,因为我现在在移动设备上。但也许你已经得到了想法,如果不起作用。谢谢