Mailinglisten-Archive |
Moin, ----- Original Message ----- From: "Manuel Hendel" <Manuel.Hendel_(at)_easygolucky.de> To: <php_(at)_phpcenter.de> Sent: Sunday, October 28, 2001 1:43 PM Subject: Re: [php] newbie - sortieren eines Adressfiles > On Sun, Oct 28, 2001 at 09:21:41AM +0100, Thomas Beckmann wrote: > > >ich mache gerade meine ersten Gehversuche mit PHP(4). Ich habe eine > > >Textdatei, in der in jeder Zeile ein Adresse, durch ";" getrennte > > >Felder, steht. Ich lese die Datei mit "file" in Array ein. > > Vielleicht solltest Du Dir mal fgetcsv() anschauen, das scheint hier > > sinnvoller > > Wie das funktioniert, geht mir nicht ganz ein. Leider schweigt sich > mein Buch darüber auch tod. Muß ich die Datei erst mit fopen() öffnen > oder wie? Ich habe fopen() schon mal ausprobiert, irgendwie hat das > nicht hingehauen. Hmm.. evtl. solltest du man einen Blick ins PHP Manual verwerfen. http://www.php.net/manual/de/function.fgetcsv.php Dort haettest du gesehen was du alles brauchst. Ein fopen gehoert dazu. Ein komlettes Beispiel ist im Manual mit drin und du brauchst nur c&p machen und den Dateinamen abzuaendern. Solltest du in dem Beispiel auf Funktionaufrufe treffen due du nicht kennst schlage sieh einfach nach... www.php.net/der_funktionsname . Das Manual kann man sich auch komplett downloaden und fuer Windowsanwender steht es sogar im *.chm Format mit Index und Suche bereit. > > >Nun möchte > > >ich diese Adressen nach der Postleitzahl sortieren. Danach sollen sie > > >ausgegeben werden. Das habe ich mit "foreach ($array As $line)" und > > >ein paar "print" Anweisungen gelöst. > > >Kann mir jemand beim sortieren helfen? > > Am einfachsten ist es, wenn Du die Zeilen selbst in ein array > > zerlegst, also nach dem Einlesen > > foreach ($array as $zeile) $narray[] = explode(';', $zeile); > > Das ist mir klar. explode() ist das gleiche wie split(), oder? Nein ist es nicht.. split() akzeptiert als unter anderem eine Regex als Suchmuster. > > Das kannst Du nun sortieren, z.B. mit usort, dazu brauchst Du eine > > Vergleichsfunktion: > > function plzcmp($a,$b) > > { > > return $a[3]==$b[3] ? 0 : (int)$a[3]>(int)$b[3] ? 1 : -1; > > } > > wobei 3 die Spalte Deines PLZ-Feldes ist (Zählung beginnt mit 0) > > Dann kannst Du mit > > usort($narray, 'plzcmp'); > > Dein $narray nach der 3. (4.) Spalte numerisch sortieren lassen. > > Die Ausgabe ist dann > > foreach ($narray as $azeile) echo join(';', $azeile)."<BR>\n"; > > oder so, jedenfalls sind die einzelnen Zeilen ja jetzt selbst arrays > > ... > > Alles klar? > > Nicht wirklich! Das verstehe ich nun wieder überhaupt nicht. > > Ich habe die ganze Nacht darüber nachgedacht. Ich hätte die ganze > Sache mit ein paar if () Abragen und ein bißchen regex gelöst. Das ist > aber unheimlich viel Code. > > Manuel Aller Anfang ist schwer... wo dir die besten Loesungsmoeglichkeiten schon genannt wurde. Um ein Array zu durchwandern (und oder auszugegeben) gibt es mehrere Moeglickeiten. $woche[] = "Montag"; $woche[] = "Dienstag"; // fuer php 3 + 4 reset($woche); while (list($key, $value) = each ($woche)) { echo "$Key =>$value<br />\n"; } // nur php 4 reset($woche); foreach ($woche as $key => $value) { echo "$key =>$value<br />\n"; } Dann gibt es da noch etwas mit einer for Schleife und der Anzahl von Arrayeintraegen. Die halte ich aber fuer unsinnig und somit verschweige ich sie. Um ein Array nur mal anzeigen zulassen (fuer Debugzwecke) ist var_dump() oder aber print_r() zugebrauchen... umrahmt von einem <pre> Tag </pre>. // Aufbau von adressen.txt // Vorname ; Nachname; email $content = file("adressen.txt;"); reset($content); while(list($key, $value) =each($content)){ $row = explode(";", $value); echo "<a href=\"mailto:".trim($row[2]).\">".htmlentities($row[0]." ".$row[1])."</a><br />\n"; } Alle Angaben inkl. Tippfehler ;) Gruss Joerg Behrens
php::bar PHP Wiki - Listenarchive