Felix: ArrayArray

Guten Tag,

es gab zwar schon ein posting zu dieser Ausgabe "arrayarray", jedoch hat dies nicht weitergeholfen. Ich bekomme bei meinem Ansatz immer nur  "Array
 Array"
raus, jedoch soll er array[0] bis array[n] ausgeben.
Bei der print_r Variante stimmen stimmt alles, nur die Ausgabe in meinem Ansatz stimmt nicht.

<?php

$fp=fopen("http://datei.xml","r");
$inhalt=fread($fp,1000000);

if(preg_match_all("@<title>(?:<![CDATA[)?(.*?)(?:]]>)?</title>@is",$inhalt,$match))
{

foreach ($match as $title)

{

print_r "$title>";

}
}

else echo "Tag nicht gefunden";

?>

  1. P.S.:

    an die Stelle

    print_r "$title>";

    gehört natürlich echo

  2. Servus,

    raus, jedoch soll er array[0] bis array[n] ausgeben.

    Das tut "er" auch. Allerdings gibt preg_match_all  ein mehrdimensionales Array zurueck, wobei (in der Standardeinstellung) $matches[0] ein Array des Gesamtpatterns jeder Fundstelle ist, $matches[1] entsprechend das erste Subpattern, usw.

    Bei der print_r Variante stimmen stimmt alles, nur die Ausgabe in meinem Ansatz stimmt nicht.

    Das obige haettest du mittels print_r eigentlich auch sehen muessen ;)

    print_r "$title>";

    Du moechtest hier also hoechstwahrscheinlich folgendes notieren:
    echo $title[1] .">";

    Desweiteren rate ich dir, dir das Kapitel über Strings einmal genau durchzulesen. Beinahe alle Double Quotes (Anführungszeichen, "), die du hier verwendest, kannst du dir nämlich sparen und stattdessen Single Quotes (Hochkomma, ') verwenden, damit PHP nicht alle Strings nach Variablen und Sonderzeichen parsen muss um dann festzustellen, dass ohnehin keine drin sind.
    Ausserdem ist es zwar moeglich, Sachen wie
    echo "Ellenlanger Text $variable mehr Text";
    zu notieren, aber es ist a) unübersichtlich für den Leser des Codes und b) zeitaufwendiger für den Parser, als wie folgt vorzugehen:
    echo 'Ellenlanger Text '. $variable .' mehr Text';

    Zu guter letzt möchte ich dir noch davon abraten, Kurzschreibweisen wie

      
    if ($condition) doSomething();  
    else doSomethingElse();  
    
    

    zu verwenden, da sie zum einen extrem unübersichtlich sind und zum anderen die Anweisungen schlecht (bzw. garnicht) zu erweitern sind.
    Besser:

    if ($condition) {  
        doSomething();  
    } else {  
        doSomethingElse();  
    }  
    
    

    Gruss
    Patrick

    --
    sh:( fo:| ch:? rl:( br:> n4:( ie:% mo:) va:} de:> zu:) fl:| ss:| ls:[ js:|
    1. Danke für deine Anmerkungen.

      Ich habe es mittlerweile auch gecheckt und es klappt jetzt mit ech.

      Ich habe jetzt nur ein anderes Problem, nähmlich, dass er die Tags, die ich ja mit regexp ausgeschlossen habe, mit in die DB übernimmt. Bei echo sieht man sie nicht; so wie es soll.

      foreach ($match as $level)

      {

      foreach ($level as $lev => $title)
                   {
                      mysql_query("INSERT INTO rss (TITLE) VALUES      ('$title');");
                   }
         }
      }

      else echo "Tag nicht gefunden";

      1. Servus,

        Danke für deine Anmerkungen.

        Ich habe es mittlerweile auch gecheckt und es klappt jetzt mit ech.

        Ich habe jetzt nur ein anderes Problem, nähmlich, dass er die Tags, die ich ja mit regexp ausgeschlossen habe

        Du hast sie nicht ausgeschlossen, sie sind Teil des Regex.

        foreach ($match as $level) {

        Du sagst doch hier, dass für alle Subpatterns (= $level)

        foreach ($level as $lev => $title) { [...]

        jede Fundstelle

        mysql_query("INSERT INTO rss (TITLE) VALUES      ('$title');");

        in die Datenbank eingetragen werden soll.

        Schliesse also mit einer geeigneten Methode die Subpatterns aus die du nicht brauchst (oder in diesem Fall besser: Verwende nur die Subpatterns, die du brauchst; Tipp: Du brauchst nur 1 Schleife)

        Gruss
        Patrick

        --
        sh:( fo:| ch:? rl:( br:> n4:( ie:% mo:) va:} de:> zu:) fl:| ss:| ls:[ js:|
        1. Schliesse also mit einer geeigneten Methode die Subpatterns aus die du nicht brauchst (oder in diesem Fall besser: Verwende nur die Subpatterns, die du brauchst; Tipp: Du brauchst nur 1 Schleife)

          Danke, werde es versuchen.
          Nur wieso macht er es denn bei einem echo richtig? Nur beim INSERT macht er es falsch?