foreach Problem (eine von 100 Zeilen rausgreifen) & fortlaufendes Array
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
array
code
dank
datum
file
geringem sachverstand
glauben
inhalt
input
kompliziert denken
ordern
output
problem
schleife
tabelle
umbruch
verschwendete rechenzeit
zeile
ziel
zugreifen
-
Hi, ich frage eine Tabelle aus einer anderen Website ab. Und zwar mit
$lines = file ('http://Beispieladresse.de'); foreach ($lines as $line_num => $line) { echo "Line #<b>{$line_num}</b> : " . htmlspecialchars($line) . "<br>\n"; }
Klappt super. Mein Problem ist nur, dass mich bei der gesamten Seite NUR Zeile 104 (Weil da dieTabelle ist, die die Daten enthält interessiert.) Gibt es da eine Möglichkeit, das er nur Zeile 104 Wiedergibt?
Ausspucken tut er das in etwa so:
<tr><td class="L">Datum</td><td class="L">Name</td><td class="L"><u>Spende</u><br/>Wieviel</td></tr><tr><td class="L">Datum</td><td class="L">Name</td><td class="L"><u>Spende</u><br/>Wieviel</td></tr>
usw.
Das wollte ich dann per:
$explode = explode("</td><td class="L">",$line); foreach ($explode as $zeilennummer => $inhalt) { echo "Zeile:".$zeilennummer." inhalt: " .$inhalt. "<br>";
aufsplitten und in neue Arrays alla:
$datum1;$name1;$spende1;$wieviel1;
$datum2;$name2;$spende2;$wieviel2
speichern. allerdings bekomme ich das mit in Schleifen den Zahlen nicht hin. In der oberen Abfrage macht er das zwar mit der Zeilennummer
foreach ($lines as $line_num => $line) {
aber ich bekomme das nicht vernünftig hin. Kan mir wer bitte helfen? Am besten mit ner kleinen Erläuterung der foreeach Schleife. Oder eine Seite wo die Foreeach Schleife MIT dieser "=>" Variante erklärt wird. Ich finde immer nur die "einfach" -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Naja ich könnte ja alle zeilen in ein Fortlaufendes Array schreiben und dann Array Nummer 104 nur in den anderen Ding auswerten. OK wär das erstmal geklärt. Bleibt nur noch die 2. Frage.
Wie bekomme ich das fortlaufende Array hin? Dann müsste es ja klappen. -
Wenn du $lines mittels file() gefüllt hast, ist $lines bereits ein fortlaufendes Array. ;)
Laß dir den Inhalt von $lines doch einfach mal mit
echo '<pre>'.var_dump($lines).'</pre>';
oder
echo '<pre>'.print_r($lines).'</pre>';
anzeigen.
FF -
saalko schrieb:
Klappt super. Mein Problem ist nur, dass mich bei der gesamten Seite NUR Zeile 104 (Weil da dieTabelle ist, die die Daten enthält interessiert.) Gibt es da eine Möglichkeit, das er nur Zeile 104 Wiedergibt?
$lines = file ('http://Beispieladresse.de'); foreach ($lines as $line_num => $line) { if($line_num == "104") { echo "Line #<b>{$line_num}</b> : " . htmlspecialchars($line) . "<br>\n"; } }
-
Dann zeigt er mir die Original Website an. Und zwar ziemlich verunstaltet.
Bitte nicht so kompliziert denken.
Gerade gesehen. Genau so trueweb. das wollte ich haben.
Danke. glaube habe dann jetzt auch verstanden, was ich wissen wollte.
foreach ($lines as $line_num => $line) {
$line_num ist die Zeilennummer. bzw. der Umbruch. OK also kann ich mit dem mir ein Array basteln.
Danke hoffe mal, ich habs raus.
Werde mich jetzt zuhause wieder hinsetzen müssen. Danke. -
saalko schrieb:
Dann zeigt er mir die Original Website an. Und zwar ziemlich verunstaltet.
Klar, weil der Inhalt des Arrays noch nicht gefiltert war. Du kannst aber auch ohne die Schleife direkt auf jedes Array-Element zugreifen:
echo htmlspecialchars($lines[103]);
Zeile 103 deshalb, weil die Nummerierung des Arrays bei 0 beginnt. -
saalko schrieb:
Dann zeigt er mir die Original Website an. Und zwar ziemlich verunstaltet.
Bitte nicht so kompliziert denken.
Gerade gesehen. Genau so trueweb. das wollte ich haben.
Danke. glaube habe dann jetzt auch verstanden, was ich wissen wollte.
foreach ($lines as $line_num => $line) {
$line_num ist die Zeilennummer. bzw. der Umbruch. OK also kann ich mit dem mir ein Array basteln.
Danke hoffe mal, ich habs raus.
Werde mich jetzt zuhause wieder hinsetzen müssen. Danke.
Bitte tu mir den Gefallen und schreibe, wenn du nur ein Element eines Arrays willst
echo "Line #<b>{$meinindex}</b> : " . htmlspecialchars($line [$meinindex]) . "<br>\n";
und nicht
foreach ($lines as $line_num => $line) { if($line_num == $meinindex) { echo "Line #<b>{$line_num}</b> : " . htmlspecialchars($line) . "<br>\n"; } }
Das ist nur verschwendete Rechenzeit und zeugt von geringem Sachverstand. Das ganze entspricht ungefähr folgender Szene: Du willst in die Hauptstraße 104. Um dahinzukommen fährst du zur Hauptstraße 1, klingelst und fragst "Ist das hier die 104?". Dann fährst du zur Hauptstraße 2, klingelst und fragst "Ist das hier die 104?" und so weiter. Natürlich kommst du auch so an dein Ziel, aber machst dich auch etwas zum Affen damit. Die Alternative ist halt einfach zur Hauptstraße 104 zu fahren und dort zu klingen. file () liefert ja eine indizierte Liste (array), warum also nicht direkt auf den Index zugreifen?
Beitrag zuletzt geändert: 5.8.2009 19:24:16 von census -
Danke Census und fatfreddy. Bin für jede vereinfachung offen.
Das ist nur verschwendete Rechenzeit und zeugt von geringem Sachverstand.
Hast mich ertappt. Wie gesagt nur ein Hobby, habe sonst NICHTS damit zu tun.
So jetzt wieder 3 weitere Probleme.
das 1.
Ich will eine Suchanfrage stellen. Und zwar, habe ich bisher ein Textfeld erstellt, das sendet seine Daten per Post weiter. (Array heißt $_POST['wer'])
So funktioniert es: und so soll es dann auch ausgegeben werden:
$wer = "dat_name = 'Braktor' OR dat_name = 'Hordar'";
Und so sieht mein Code aus. Da ich auch mehrere Zulassen will, habe ich gesagt, wenn sie mehrere Namen haben wollen, dann sollen sie die Namen mit einem ";" Trennen. Also eingeben "Braktor;Hordar"
So also wollte ich es per "foreach" Schleife und "explode" Befehl trennen. Leider stimmt die Syntax nicht.
$wer ="". foreach (explode(";",$_POST['wer']) as $werinhalt) { dat_name = '".$werinhalt']."' OR } dat_name = ' ' ."";
Ist bestimmt nur ein kleiner verschreiber. Aber leider finde ich den Fehler nicht. Was mich auch etwas ärgert, wenn ich ein Array mit Text ausgeben will, dann schreibe ich
echo "".$array." ich begrüße sie.";
Das ich das mit zwei Anführungszeichen starte ist doch auch so ein Bekenntnis, dass ich keine Ahnung habe oder?
2. Den Kram mache ich, um in einer Datenbank in 2 Verschiedenen Spalten suchen zu lassen. Das mit dem And und OR bekomme ich schon fast hin.
$result = mysql_query("SELECT dat_zeit, dat_name, dat_anzahl, dat_artikel FROM daten WHERE ".$wer." AND ".$was." ORDER BY dat_zeit;") OR die(mysql_error());
$was ist so ziemlich das selbe Array wie $wer, nur, das er statt nach dat_name nach dat_artikel sucht.
Ich will es jetzt so haben, dass er mir alle Auflistet, wo entweder der Name oder der andere Name, in der Spalte dat_name auftaucht, aber nur da wo, dat_artikel das eine oder das andere ist. Quasi:
Zeige mir die Datensätze wo (Name1 oder Name2) und (Artikel1 oder Artikel2) steht.
Mit der oben gezeigten Syntax, versteht er es aber so:
Zeige mir die Datensätze wo (Name1 oder (Name2 und Artikel1) oder Artikel2) steht.
3. wieder ein foreach problem.
Ich will in einer anderen Abfrage von einer anderen Seite Daten abfragen und aufspalten, und in meine Datenbank übertragen.
Das Problem:
Es steht in einer Tabelle, und zwar möchte ich, das er nicht jede Zeile die Schleife neu durchlaufen lässt, sondern nur jede 3.
OK das wars erstmal. Wäre nett, wenn kurz meine Fehler erklärt würden, dass ich es endlich in den Kopf bekomme. -
Ad 1:
Prämisse: Im String $input steht "Name1;Name2;Name3"
Ziel: Im String $output steht "dat_name='Name1' or dat_name='Name2' or dat_name='Name3'"
$arr = explode (";", $input); $output = ""; foreach ($arr as $token) $output .= " or dat_name='$token'"; $output = substr ($output, 4);
Oder viel einfacher:
$output = "dat_name='" . str_replace (";", "' OR dat_name='", $input) . "'";
Ad 1.1:
Um einen Array strukturiert auszugeben, nutze
print_r ($array);
Bin mir aber nicht sicher, ob das das ist, was du willst.
Ad 2:
Setze Klammern, dann bei (99% aller Implementationen von) SQL hat AND eine höhere Präzedenz als OR.
$result = mysql_query("SELECT dat_zeit, dat_name, dat_anzahl, dat_artikel FROM daten WHERE ($wer) AND ($was) ORDER BY dat_zeit;") OR die(mysql_error());
Ad 3:
Das hier gibt jedes dritte Element eines Arrays aus
for ($i = 0; $i < count ($arr); $i += 3) echo $arr [$i];
Beitrag zuletzt geändert: 7.8.2009 8:46:54 von census -
So Habe es alles geschafft, es funktioniert wahnsinn. Ich wollte mich jetzt nur nochmal bei allen bedanken, die mir geholfen haben und auch denen die sich Zeit genommen haben, mein Wirrwarr zu entschlüsseln.
Beitrag zuletzt geändert: 10.8.2009 15:10:40 von saalko -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage