Jan K.: verständnisproblem mit explode()

Hallo zusammen,

ich möchte gerne eine Html Datei in ein PHP Script einlesen und dann nach Schlüssel-Srings in Einzelteile zerhacken.

Dazu habe ich erstmal eine Html Datei namens test2.html angelegt und die "einlesende Datei" test1.php .

test2.html
-----------------------------------------------------
<html>
Blaukraut bleibt Blaukraut und Brautkleid<br>
bleibt Brautkleid.
</html>
-----------------------------------------------------
test1.php
-----------------------------------------------------
<?
$fp = fopen("test2.html","r");
$text= " ";
while($text!="") {
$text = fgets($fp,10000);
$zw=explode("<br>", $text);
echo $zw."<br>";
}
print_r($zw);
?>
-----------------------------------------------------
Das ganze Spuckt mir dann 6 Zeilen aus, in jeder Steht Array.
Aber ich schnall irgendwie nich wie der array heißt. Im Manual steht zu explode() "Gibt ein Array aus Strings zurück, die jeweils Teil von string sind." .
Kann mir jemand sagen wie das array heißt? Ich bin irgendwie zu blöd heute.

Gruß,

Jan

  1. Hi,

    <?
    $fp = fopen("test2.html","r");
    $text= " ";
    while($text!="") {
    $text = fgets($fp,10000);
    $zw=explode("<br>", $text);
    echo $zw."<br>";
    }
    print_r($zw);
    ?>

    ich weiß nicht was du erreichen willst, deswegen kann ich dir nicht unmittelbar helfen. Ich weiß aber, dass du nicht weißt, wie man ein Array ausgibt. (Ein Array ist kein String. echo gibt Strings aus.) Deine Methode eine Datei einzulesen ist auch nicht sauber (bzw. funktioniert nicht mehr sobald ich in meine Datei eine leere Zeile schreibe). Beide Probleme von dir wären unnötig, wenn du dir die zugehörigen Informationsseiten im PHP-Manual ansiehst.

    Schöne Grüße
    Julian

    1. Naja,

      ich wollte die html datei zeilenweise einlesen.
      Das funktioniert so:
      <?
      $fp = fopen("test2.html","r");
      $text= " ";
      while($text!="") {
      $text = fgets($fp,10000);
      $text=htmlspecialchars($text);
      echo $text."<br>";
      }
      ?>

      Das brint mich schonmal auf die Spur, daß ich mit
      <?
      $fp = fopen("test2.html","r");
      $text= " ";
      while($text!="") {
      $text = fgets($fp,10000);
      $zw=explode("<br>", $text);
      echo $zw."<br>";
      }
      print_r($zw);
      ?>
      jede Zeile nach dem Schlüsselstring absuche. Also müsste ich schonmal jede Zeile In einem String ablegen, dem bei jedem durchlauf die nächste Zeile angehängt wird bevor ich ich explode benutze.

      Aber ich kapier immernoch nich wohin explode mir die Teile ablegt.

      Gruß,

      Jan

      1. Hi,

        Aber ich kapier immernoch nich wohin explode mir die Teile ablegt.

        genau, das ist dein Problem. Im Manual steht, dass Explode ein Array zurückgibt. Schauen wir uns deinen Code an:
        $zw = explode(...)
        *nachdenk*, also explode gibt was zurück, $zw bekommt was zugewiesen - GENAU, $zw ist das zurückgegebene Array.
        Daher auch Julians Hinweis, echo $zw ist nicht das was du suchst, du suchst den Zugriff auf ein Array Element wie z.B. $zw[0].

        MfG
        Rouven

        --
        -------------------
        ie:| fl:| br:> va:| ls:& fo:) rl:( n4:{ ss:) de:] js:| ch:? mo:} zu:|
        1. Arrr,

          das explode hab ich schon kapiert, war nur zu blöd für das wesentliche :-) .

          $fp = fopen("test2.html","r");
          $text= " ";
          while($text!="") {
          $text = fgets($fp,10000);
          $zw=$zw.$text;
          }
          $zw=explode("<br>", $zw);
          print_r($zw);
          ?>

          So steht jetzt auch alles fein im array $zw.

          Entschuldigt meine Belästigung ;)

          1. Hallo nochmal,

            ich probiere grade meine Daten aus einer Seite zu extrahieren.
            Dazu will ich das erste mal mit explode() grob alle periodisch vorkommenden bereiche in einem array ablegen.

            Das zweite mal soll mit explode() genau der Bereich "ausgeschnitten" werden der meine Daten beinhaltet.

            Die groben bereiche sehen so aus: http://12monkeys.dyndns.org/test/test2.php (die schwarzen zahlen davor stehen für den jeweiligen arrayindex)

            Nun müsste ich beim zweiten explode eigentlich nurnoch den Trenn-String "&gt; angeben um direkt die Daten eingegrenzt zu haben.

            Funktioniert soweit mit allen Zeichen, nur mit dem Anführungszeichen kann ich den String nicht trennen.

            Kann mir da jemand was zu sagen?

            Gruß,

            Jan

            Achso, hier nochmal mein PHP-Script:
            <?
            $popo=file_get_contents("http://www.battle.net/war3/ladder/w3xp-clan-profile.aspx?Gateway=Northrend&ClanTag=12m");
            $popo = htmlspecialchars($popo);
            $zw=explode("PlayerName=", $popo);
            $anzahl = (count($zw));
            echo "<b style='color:green'>$anzahl</b><br>";
            for($i=1;$i<=($anzahl-1);$i++) {
            echo "<b>$i</b>".$zw[$i]."<br>";
            }
            for($i=1;$i<=($anzahl-1);$i++) {
            $zw1[$i]=explode(""&gt;", $zw[$i]);
            echo "<b style='color:red'>".$zw1[$i][$i]."<br>";
            }
            ?>

            1. Hab den Fehler selber entdeckt.

              1. So, nach einer nacht php häng ich an einem Problem das mir bestimmt Alpträume bereitet.

                Ich muss einen mathematischen Ausruck für das "können" in einem Computerspiel aus 2 Konstanten finden.

                Dazu gibt es einmal die gesammtzahl der absolvierten Spiele und zum anderen den Prozentsatz der gewonnenen Spiele.

                Spieler a hat beispielsweise 80 spiele absolviert und 65% gewonnen.
                Spieler b hat beispielsweise 500 spiele absolviert und 59% gewonnen.

                Dem "erfahrungswert" zu urteilen wird spieler b spieler a besiegen, da er weit mehr spielerfahrung hat.

                Wie kann ich das in einer Formel unterbringen?

                Gute Nacht,

                Jan

                1. Hi,

                  wieso änderst Du eigentlich ständig Deinen Namen?

                  Dem "erfahrungswert" zu urteilen wird spieler b spieler a besiegen, da er weit mehr spielerfahrung hat.

                  Wie kann ich das in einer Formel unterbringen?

                  Wie viel ist, in Zahlen ausgedrückt, ein Spiel an Erfahrung wert?

                  Cheatah

                  --
                  X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
                  X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
                  X-Will-Answer-Email: No
                  X-Please-Search-Archive-First: Absolutely Yes
  2. Hallo Jan,

    test2.html

    <html>
    Blaukraut bleibt Blaukraut und Brautkleid<br>
    bleibt Brautkleid.
    </html>

    Das ganze Spuckt mir dann 6 Zeilen aus, in jeder Steht Array.

    Das kann ich nicht nachvollziehen - es sei denn, du hättest noch eine Leerzeile in deiner test2.html, die du hier nicht angibst. Ich komme sonst auf 5 Zeilen (vorausgesetzt, nach "</html> kommt noch ein Zeilenumbruch, sonst nur 4).

    <?

    Unsauber: Verwende besser die ausführliche Schreibweise "<?php", denn die Kurzform (short_open_tags=on) ist nicht auf allen Servern zulässig.

    $text= " ";
    while($text!="") {
    $text = fgets($fp,10000);

    Kann man eleganter schreiben:

    while (($text=fgets($fp,10000))!="")

    Damit liest du jeweils eine Zeile deiner Quelldatei ein.

    $zw=explode("<br>", $text);

    und brichst diese eine Zeile an eventuell vorhandenen <br>-Tags auf. Als Ergebnis erhältst du in $zw ein Array, das nur ein Element enthält, wenn kein <br> in der Zeile vorkam, sonst mehrere Elemente.

    echo $zw."<br>";

    Das ergibt die Ausgabe "Array".

    print_r($zw);

    Ah, und vom letzten Schleifendurchlauf zeigst du das Ergebnis nochmal ausführlich an.

    Im Manual steht zu explode() "Gibt ein Array aus Strings zurück, die jeweils Teil von string sind.".
    Kann mir jemand sagen wie das array heißt?

    Was meinst du mit "heißt"? Es wird als *Funktionsergebnis* zurückgegeben und hat damit erstmal keinen Namen. Du kannst es einer Variablen zuweisen, so wie du es ja auch machst. Die hat dann den Namen, den du ihr gibst.

    Aber dein eigentliches Problem ist doch, dass du eigentlich zwei Schritte machen müsstest, die du hier aber wild verwürfelst. Im ersten Schritt willst du den gesamten Dateiinhalt ein *einen* String einlesen (file() mit anschließendem implode(); ab PHP 4.3.0 auch bequemer mit file_get_contents()), und erst im zweiten Schritt diesen String aufsplitten.

    So long,
     Martin

    --
    Wenn man keine Ahnung hat - einfach mal Fresse halten.
      (Dieter Nuhr, deutscher Kabarettist)
    1. Yo,

      danke. Ich werde auch mal file_get_contents() probiern.

      Gruß,

      Jan