需要更改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]=>[""]
}
}
...
答案 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>';