Tom: String anhand von Muster auslesen

Beitrag lesen

Hello,

Das gewünschte Ergebnis soll dann folgendes sein:
Array
(
  [ServerAddress] => www.irgendwas.de
  [IP] => 194.97.107.174
  [Date] => 14/Sep/2005:00:00:41 +0200
  [Method] => GET
  [Request] => /style.php?frame=true
  [Protocol] => HTTP/1.0
  [ServerCode] => 200
  [Bytes] => 95
  [Referer] => -
)

Warum schaust Du Dir dann nicht die Stringfunktionen von PHP an?
Und wie fanelf.de schon schrieb, ist explode() für das erste Auseinandernehmen an den Leerzeichen die passende Funktion.

$_datenfelder = explode(' ',rtrim($zeile));

Dann umstapeln in ein assoziatives Array.

  • Domain          -
  • IP              -
  • User            einzelnen Strich entfernen
  • PW              einzelnen Strich entfernen
  • Datum, Zeit     führende linke eckige Klammer entfernen, splitten
  • Zeitzone        anhängende rechte eckige Klammer entfernen
  • Method          Führendes Anführungszeichen entfernen
  • URi             -
  • Sheme, Version  anhängende rechte Klammer entfernen, splitten
  • Status          -
  • Bytes sent      -
  • Referer         umschließende Anführungszeichen entfernen

Das geht zum Besipiel mit http://de2.php.net/manual/de/function.array-combine.php, wenn man sich die Spaltenbezeichnungen einmal als Array festgelegt hat.

Und dann mittels der Stringfunktionen die empfohlenen Korrekturen über die Feldnamen durchführen.

foreach($_spalten as $spaltenname => $wert)
{
  $func = 'f_'.$spaltenname;
  if (function_exists($func))
  {
    $_spalten($spaltenname) = $func($wert);
  }
}

Nun brauchst Du nur noch die Korrekturfunktionen zu definieren:

#----------------------------------
  function f_User($wert)
  {
    if ($wert == '-') return '';
  }
#----------------------------------
  function f_Datum($wert)
  {
    if (substr($wert,0,1) == '[')
    {
      $date = substr($wert,1,-8);
      $time = substr($wert,-8);

$date_split = explode('/',$date);
      $time_split = explode(':',$time);

$ret = array('date' => $date_split, 'time' => $time_split);
    }
    else
    {
      return false;
    }

return $ret;
  }
#----------------------------------

usw.

Das ist eine gut Übung für Dich, um die String- und Arrayfunktionen kennenzulernen, bevor Du dich an Regular Expressions heranwagst.

Harzliche Grüße vom Berg
esst mehr http://www.harte-harzer.de

Tom

--
Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
Nur selber lernen macht schlau