BarclayVision BarclayVision - 2 months ago 4
PHP Question

Format of Array using SimpleHtmlDom

Need to change the output of the array format generated by SimpleHtmlDom. my PHP code is. The results of the SimpleHtmlDom that I'm using is returning hospital names as the key not the value?:

<?php
require('simple_html_dom.php');

$table = array();
$html = file_get_html('https://www.miemssalert.com/chats/Default.aspx?hdRegion=3');

foreach($html->find('table#tblHospitals tr td.Chats') as $e)
{
//echo $e->plaintext . $e->getAttribute('style') . '<hr>';
$nametime = $e->plaintext;
$color = $e->getAttribute('style');
$table[$nametime][$color] = true;
}
echo json_encode($table);

echo '<pre>';
var_dump($table);
echo '</pre>';
?>


current Array results:

array(37) {
["Anne Arundel Medical Center"]=>
array(1) {
[0]=>
bool(true)
}
[""]=>
array(1) {
[0]=>
bool(true)
}
["Baltimore Washington Medical Center"]=>
array(1) {
[0]=>
bool(true)
}
["04:31"]=>
array(1) {
["background-color:#ffff00;color:#000000;"]=>
bool(true)
}
["Bon Secours Hospital"]=>
array(1) {
[0]=>
bool(true)
}
...


Looking for results to be nested array by Name=>Time=>Color

array(37) {
array(1) {["Name"]=>["Anne Arundel Medical Center"]=>
array(2) {
[time]=>[""],[color]=>[""]
}
}
array(1) {["Name"]=>["Baltimore Washington Medical Center"]=>
array(2) {
[time]=>["04:31"],[color]=>["background-color:#ffff00;color:#000000;"]
}
}
array(1) {["Name"]=>["Bon Secours Hospital"]=>
array(2) {
[time]=>[""],[color]=>[""]
}
}
...

Answer

You need to loop over the rows, not the cells, so that each hospital corresponds to an element in the result array. Get the hospital name from the first td in the row, and the times and colors from the remaining ones in a nested loop.

<?php
require('simple_html_dom.php');

$table = array();
$html = file_get_html('https://www.miemssalert.com/chats/Default.aspx?hdRegion=3');

foreach($html->find('table#tblHospitals tr') as $hosp)
    {
        $tds = $hosp->find('td.Chats');
        if (!empty($tds)) {
            $name = $tds[0]->plaintext;
            $row = array('name' => $name, 'time' => array(), 'color' => array());
            foreach (array_slice($tds, 1) as $e) {
                $time = $e->plaintext;
                $color = $e->getAttribute('style');
                $row['time'][] = $time;
                $row['color'][] = $color;
            }
            $table[] = $row;
        }
    }

echo '<pre>';
var_dump($table);
echo '</pre>';