2014-12-04 171 views
0

我从另一个网站上抓取一张表,并设法抓取数据,并将其作为数组返回,这很好。PHP返回一个数组

我用于循环访问数组并打印数据和数据显示。有三个项目在“行” -

地址,乐队,价格

我试图返回数组分配给这些头,这样我可以搜索地址,并将其匹配到当前的地址,但我似乎无法找到正确的代码。

include ("simple_html_dom.php"); 
// Dump contents (without tags) from HTML 
$html = file_get_html('http://www.mycounciltax.org.uk/results?postcode=b757ep&search=Search'); 
$ret = $html->find("td"); 
$totalret = count($ret); 
for ($x = 0; $x <= $totalret; $x++) { 
    echo "$ret[$x] $x <br>"; 
} 

这就是代码,并将其返回

90, REDDICAP HEATH ROAD, SUTTON COLDFIELD, WEST MIDLANDS B75 7EP 0 
D 1 
£1294 2 
92, REDDICAP HEATH ROAD, SUTTON COLDFIELD, WEST MIDLANDS B75 7EP 3 
D 4 
£1294 5 
94, REDDICAP HEATH ROAD, SUTTON COLDFIELD, WEST MIDLANDS B75 7EP 6 
D 7 
£1294 8 
96, REDDICAP HEATH ROAD, SUTTON COLDFIELD, WEST MIDLANDS B75 7EP 9 
D 10 
£1294 11 

首先你的地址,然后乐队(d),然后下面的价格(每行的末尾数字是$ X刚为测试目的)

我将如何去转换该数组,以便每行(地址,乐队,价格)被分配它是正确的标题,以便我可以搜索和匹配数据?

+0

只是出于兴趣的JavaScript为你的问题? – Pogrindis 2014-12-04 10:42:09

+0

我想用php真的,JavaScript是另一种语言给我和tbh我不是PHP专家,所以分支可能会混淆我更多哈。 – James 2014-12-04 10:47:38

+0

我可以理解,只有JS肯定会更容易进行DOM操作。请看看这个。 – Pogrindis 2014-12-04 10:51:17

回答

0

下面的代码将返回类似

Array (
    [0] => Array 
     (
      [address] => 90, REDDICAP HEATH ROAD, SUTTON COLDFIELD, WEST MIDLANDS B75 7EP 
      [band] => D 
      [price] => £1294 
     ) 
    [1] => Array 
     (
      [address] => 92, REDDICAP HEATH ROAD, SUTTON COLDFIELD, WEST MIDLANDS B75 7EP 
      [band] => D 
      [price] => £1294 
     ) 


$html = file_get_html('http://www.mycounciltax.org.uk/results?postcode=b757ep&search=Search'); 
$tds = $html->find("td"); 

$searchTerm = '92, REDDICAP HEATH ROAD, SUTTON COLDFIELD, WEST MIDLANDS B75 7EP'; 

$searchResults = array(); 

$properties = array(); 
$current = 0; 


foreach ($tds as $td) { 
    $td = trim(strip_tags(trim($td))); 
    // or $td = trim($td->innertext()); 
    $properties[(int)($current/3)][] = $td; 
    $current++; 
} 

$keys = array('address', 'band', 'price'); 
foreach ($properties as &$property) { 
    $property = array_combine($keys, $property); 
    if ($property['address'] == $searchTerm) { 
     $searchResults[] = $property; 
    } 
} 

print_r($properties); 
print_r($searchResults); 
+0

这太棒了,谢谢..我现在已经得到它列出的属性,只需要找到一种方法来扫描属性,看看是否有地址,然后显示乐队和价格 – James 2014-12-04 11:18:32

+0

你需要帮助该部分?如果您经常访问mycounciltax网站,您也可以将这些数据保存在本地数据库中并在那里搜索。它会更快,更可靠。有时,您可以将本地数据与mycounciltax的数据同步。 – cornelb 2014-12-04 11:21:07

+0

每个属性都有不同的市政税区。理想情况下,我希望物业找到自己的乐队和价格(因此使用此代码),而不是为每个物业手动输入乐队。这就是为什么我使用这个网站,因为它列出了邮政编码的所有乐队。我只需要找到正确的地址找到它的乐队和价格。我可以得到它显示列出的属性数量(0-23),但试图显示每条线的实际数据是困难的哈。 – James 2014-12-04 11:23:55

0

这样的事情?

$array = array(); 
$arrayIndex = 0; 
$col = 0; 
foreach($ret as $item) { 
    $array[$arrayIndex][] = $item; 
    $col ++; 
    if ($col === 2) { 
     $arrayIndex ++; 
     $col = 0; 
    } 
} 
0

尝试清洁换行符:

$html = str_replace("\n",'',$html);