phpbar.de logo

Mailinglisten-Archive

[php] newbie - sortieren eines Adressfiles

[php] newbie - sortieren eines Adressfiles

Joerg Behrens php_(at)_phpcenter.de
Sun, 28 Oct 2001 15:11:16 +0100


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