2016-09-20 2 views
0

Sie müssen die Ausgabe des von SimpleHtmlDom generierten Array-Formats ändern. mein PHP-Code ist. Die Ergebnisse des SimpleHtmlDom, die ich benutze ist Rückkehr Krankenhaus Namen als Schlüssel nicht der Wert ?:Format des Arrays mit 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>'; 
?> 

aktuelle Array Ergebnisse:

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

für die Ergebnisse der Suche nach Namen verschachtelte Array wird = > Time => Farbe

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

Sie sollten die 'tr' Elemente, nicht' td.Chats' überschleifen. Der erste 'td' im' tr' wird zum Namen. Schleife dann über die restlichen 'td' Elemente in der Reihe, um die Zeiten und Farben zu erhalten. – Barmar

+0

Warum haben Sie 'array (1)' für Arrays, die zwei Elemente haben, 'time' und' color'. – Barmar

+0

korrigierte Frage, die Ergebnisse werden leer sein, wenn keine Zeit existiert, siehe neue Änderung - siehe auch ursprünglichen Beitrag zu diesem Thema: http://StackOverflow.com/Questions/39574672/Screen-Scraping-PHP-using-Simplethmld – BarclayVision

Antwort

1

Sie über die Zeilen in einer Schleife müssen, nicht die Zellen, so dass jedes Krankenhaus auf ein Element in der Ergebnismatrix entspricht. Bekommen Sie den Krankenhausnamen von der ersten td in der Reihe und die Zeiten und die Farben von den restlichen in einer geschachtelten Schleife.

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

Das gibt alle Nullwerte? – BarclayVision

+0

Ich hatte ein paar Fehler. Ich übersprang auch nicht die Kopfzeile. – Barmar

+0

Das funktioniert super, vielen Dank, ich hatte keine Ahnung, wie ich das mit dem SimpleHtmlDom erreichen konnte - Vielen Dank !!! – BarclayVision

Verwandte Themen