使用SimpleHtmlDom的数组格式

时间:2016-09-20 16:03:50

标签: php simple-html-dom

需要更改SimpleHtmlDom生成的数组格式的输出。我的PHP代码是。我使用的SimpleHtmlDom的结果是将医院名称作为关键而不是值?:

<?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>';
?>

当前数组结果:

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)
  }
...

通过Name =&gt; Time =&gt; 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]=>[""]
  } 
  }   
...

1 个答案:

答案 0 :(得分:1)

您需要遍历行而不是单元格,以便每个医院对应于结果数组中的元素。从行中的第一个td获取医院名称,并从嵌套循环中的剩余部分获取时间和颜色。

<?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>';