ArrayArray
Felix
- php
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";
?>
P.S.:
an die Stelle
print_r "$title>";
gehört natürlich echo
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
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";
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
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?