2016-09-20 1 views
0

Vous devez modifier la sortie du format de tableau généré par SimpleHtmlDom. mon code PHP est. Les résultats de l'SimpleHtmlDom que j'utilise retourne les noms des hôpitaux comme la clé pas la valeur ?:Format de tableau utilisant 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>'; 
?> 

résultats Array actuels:

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

Vous cherchez des résultats à tableau imbriqué par nom = > Temps => Couleur

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

Vous devriez boucler sur les éléments 'tr', pas' td.Chats'. Le premier 'td' dans le' tr' devient le nom. Puis boucle sur les éléments 'td' restants dans la rangée pour obtenir les heures et les couleurs. – Barmar

+0

Pourquoi avez-vous 'array (1)' pour les tableaux qui ont deux éléments, 'time' et' color'. – Barmar

+0

question corrigée, les résultats seront vides s'il n'y a pas de temps, voir le nouveau changement - voir aussi le message original sur ce sujet: http://stackoverflow.com/questions/39574672/screen-scraping-php-using-simplehtmldom – BarclayVision

Répondre

1

Vous devez boucle sur les lignes, et non les cellules, de sorte que chaque hôpital correspond à un élément du tableau de résultats. Obtenez le nom de l'hôpital de la première td dans la ligne, et les heures et les couleurs des autres dans une boucle imbriquée.

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

Cela donne toutes les valeurs nulles? – BarclayVision

+0

J'ai eu quelques erreurs. Je n'étais pas non plus en train de sauter la ligne de tête. – Barmar

+0

Cela fonctionne très bien, merci beaucoup, je n'avais aucune idée de comment accomplir cela avec le SimpleHtmlDom - Merci beaucoup! – BarclayVision