Erstmal musst du dir überlegen, wie du zwei Werte als Rückgabewert einer Funktion bewerkstelligen willst. Ich mach das jetzt mal über ein Array mit 2 Elementen, ersteres ist der Schlüssel, zweiteres ist der Wert.
Finden des Maximums durch Sortierung ist vom Aufwand schon mal nicht so clever. Dann ist sort nicht so gut, da dabei die Indizes neu vergeben werden.
asort ist da besser.
Mit deiner Lösung kämest du mit
array_search an den Schlüssel.
Ok, modifizieren wir deine Lösung mal ein wenig:
PHP-Code:
asort($array, SORT_NUMERIC);
$max=end($array);
$key=array_search($max, $array);
Das wäre schon mal eine Lösung.
Aber wie gesagt, sortieren zum Finden des Maximums ist nicht der beste Weg. Dann suchen wir einfach mal selbst in einer Schleife nach dem Maximum.
PHP-Code:
$max=-1;
$key=-1;
foreach($array as $k=>$value) {
if($value>$max) {
$max=$value;
$key=$k;
}
}
Ich habe zum Testen mal die Zeiten gemessen. 10000 Durchläufe mit einem Array von 1000 Elementen. Da ist die erste Lösung mit 11.9147591591s dabei. Die foreach-Lösung benötigt 8.52801179886s. Ich habe noch einen Test mit einer for-Schleife gemacht, die Laufzeit ist mit 9.80442810059s sogar schlechter als bei der foreach-Schleife, ist also keine Lösung.
So, was bleibt noch? PHPs
max-Funktion akzeptiert auch ein Array als Parameter:
PHP-Code:
$max=max($array);
$key=array_search($max, $array);
Ein einfacher Zweizeiler. Und Laufzeit? 1.71920204163s, mit Abstand die beste Lösung!