phpbar.de logo

Mailinglisten-Archive

[php] Array-Script (die 4.)

[php] Array-Script (die 4.)

Thomas Beckmann php_(at)_phpcenter.de
Fri, 01 Feb 2002 12:25:51 +0100


>Auf meinem Localhost (mit PHP-Version 4.0.2, Personal Webserver) geht alles,
>aber auf dem Webserver (bei godau.org, PHP-Version 4.0.5 auf einem
>Linux-Server) funktionierts nicht richtig. Ich bekommen einen Fehler in
>Zeile 46.
Nico, wie dieser Fehler lautet, hast Du uns aber immer noch nicht
gesagt ...

><?php
>
>$buch[]=array("","Kowalewska","Hanna","kowal_1.php","Polnische Sonate");
>$buch[]=array("","Aakeson","Kim Fupz","aakeson1.php","Ulla und alles");
>
>sort($buch);                                  // hier soll das Problem
Buch ist ein mehrdimensionales array, sort sortiert ein array nach
seinen Werten. Wie soll PHP denn die Werte (==arrays) vergleichen?

>if(_(at)_$sortflag=="auf") { array_multisort($buch, SORT_DESC); } // gegen das
>if(_(at)_$sortflag=="ab")  { array_multisort($buch, SORT_ASC);  } // nach dem
Warum sortierst Du denn hier nochmal?

Dein Problem ist mit Hilfe der Funktion usort zu lösen:
Nehmen wir an, Du möchtest nach der 1. Spalte der einzelnen
buch-Einträge sortieren, dann brauchst Du eine Vergleichsfunktion
function buch_cmp1($b1, $b2)
{
	return strcmp($b1[1], $b2[1]);
}

und an der Stelle, wo jetzt Dein sort steht:
usort($buch, 'buch_cmp1');

Wenn Du in die andere Reichtung und z.B. case-insensitive sortieren
willst, mußt Du Dir eine andere Vergleichsfunktion nehmen, z.B.
function buch_cmp_irev($b1, $b2)
{
	$vgl = strcasecmp($b1[1], $b2[1]);
	return $vgl < 0 ? 1 : ($vgl > 0 ? -1 : 0);
}

--
Thomas Beckmann, Kiel, Germany
thomas_(at)_ThBeckmann.de


php::bar PHP Wiki   -   Listenarchive