Reputation: 67
HTML file: http://www.arifoorum.com/test/html.htm
I got this html contents with simplehtmldom library:
array(66) {
[0]=>
array(14) {
[0]=>
string(4) "Item"
[1]=>
string(11) "Date, time:"
[2]=>
string(8) "mõõdikud"
[3]=>
string(6) "Name 2"
[4]=>
string(6) "Name 3"
[5]=>
string(9) "Meter ID:"
[6]=>
string(6) "V_HeEn"
[7]=>
string(6) "U_HeEn"
[8]=>
string(3) "V_V"
[9]=>
string(3) "U_V"
[10]=>
string(6) "V_InTe"
[11]=>
string(6) "U_InTe"
[12]=>
string(6) "V_OuTe"
[13]=>
string(6) "U_OuTe"
}
[1]=>
array(14) {
[0]=>
string(1) "1"
[1]=>
string(19) "24.01.2013 22:23:33"
[2]=>
string(9) "Meter 002"
[3]=>
string(6) " "
[4]=>
string(6) " "
[5]=>
string(8) "40380040"
[6]=>
string(6) " "
[7]=>
string(6) " "
[8]=>
string(6) " "
[9]=>
string(6) " "
[10]=>
string(6) " "
[11]=>
string(6) " "
[12]=>
string(6) " "
[13]=>
string(6) " "
}
[2]=>
...
}
}
Full output: http://www.arifoorum.com/test/test.php
How do I get certain element from that array?
For example: lets say i want value where mõõdikud = 01
and name 2 = külm
(that should be 72,114) .
Thanks
Upvotes: 1
Views: 235
Reputation: 16719
This could be useful for other users, so I made a little function that gets the value of a cell from a table, based on values of other cells (conditions):
function getCellValue(DOMElement $table, $cellName = null, array $conditions = array()){
// get all table rows
$trs = $table->getElementsByTagName('tr');
// assume first TR is the table header
$head = $trs->item(0);
// find cell names and their index
$keys = array();
foreach($head->childNodes as $th)
if(!($th instanceof DomText))
$keys[] = trim($th->nodeValue);
if($invalidKeys = array_diff(array_keys($conditions), $keys))
throw new Exception(sprintf('Non-extistent key(s) in table: ', implode(', ', $invalidKeys)));
// find the row that meets all conditions
$targetRow = null;
foreach($table->childNodes as $tr){
// internal counter because we can't rely on DOM index
$idx = 0;
foreach($tr->childNodes as $td){
if($td instanceof DomText)
continue;
$value = trim($td->nodeValue);
// check if all conditions match
if(array_key_exists($keys[$idx], $conditions))
$targetRow = ($value != $conditions[$keys[$idx]]) ? null : $tr;
$idx++;
}
// stop if we found a match
if($targetRow)
break;
}
if(!$targetRow)
throw new Exception('No row matches your conditions');
// build an array with row cells
$values = array();
$idx = 0;
foreach($targetRow->childNodes as $td)
if(!($td instanceof DomText))
$values[$keys[$idx++]] = trim($td->nodeValue);
// return the cell value if a specific cell was requested
if($cellName !== null)
return isset($values[$cellName]) ? $values[$cellName] : null;
// otherwise return all values from the matched row
return $values;
}
It uses DomDocument
because the question wasn't tagged as simplehtmldom
@OP: in your case you would use it like:
$html = file_get_contents('http://www.arifoorum.com/test/html.htm');
$dom = new DomDocument();
$doc->preserveWhiteSpace = false;
$dom->loadHtml($html);
$table = $dom->getElementsByTagName('table')->item(0);
print getCellValue($table, 'V_V', array(
'mõõdikud' => '01',
'Name 2' => 'külm',
));
Upvotes: 1