Hi!
ich will ein Maximalwert aus einem mehrdimensionales assoziatives Array ausgeben:
Wie kann ich mir aus dem v. g. Array das Bild des/der Ältesten ausgeben lassen?
Du hast sicher nichts dagegen, wenn du den gesamten Datensatz bekommst. Dann kannst du das Array auf eben diesen einen Datensatz reduzieren - mit array_reduce(). Das Beispiel im Handbuch summiert und multipliziert, aber du kannst auch den Maximalwert ermitteln lassen. Die Funktion will neben dem Array auch eine Callback-Funktion haben. Diese bekommt zwei Parameter übergeben - je ein Datensatz. Du vergleichst von beiden Parametern/Datensätzen das Feld alter und gibst den Datensatz mit dem höchsten Alter zurück - den gesamten Datensatz, nicht nur das Altersfeld. Mit dem Trinitätsoperator ?: ist das sogar nur ein Einzeiler und kann auch als anonyme Funktion geschrieben werden, wenn du mindestens PHP 5.3 verwendest.
Bleibt noch ein Problem: der Erstaufruf bekommt nur einen Datensatz aus dem Array und als zweiten Parameter ein null. Du kannst nun zusätzlich noch auf dieses null prüfen und dann ungesehen den anderen Wert zurückgeben. Dann hast du aber bei jedem Callback-Aufruf die Prüfung ob der eine Parameter null ist und das gleiche nochmal mit dem zweiten Parameter. Einfacher ist es, array_reduce() mit dem dritten Parameter aufzurufen. Übergibt da ein array(alter => 0), dann funktioniert deine Altersprüfung problemlos.
Eine Sortierung der Liste ist nicht ausdrücklich gewünscht, darf aber bei möglichen Lösungsvorschlägen gerne in Betracht gezogen werden.
Auch das ginge, mit usort() und derselben Callback-Funktion wie bei array_reduce(). Der gesuchte Datensatz ist dann entweder das erste oder das letzte Element im Array, je nachden, in welcher Richtung du sortierst. Das ist aber aufwendiger, weil nicht wie bei array_reduce() nur einmal iteriert werden muss, sondern auch die unerwünschten Datensätze in die richtige Reihenfolge gebracht werden müssen.
Lo!