asort($array); // sortieren
array_splice($array, 1, -1); // alles weg bis auf das erste und letzte Element
|
|
| 1 |
Und woher weißt du dann welcher Key der höchste und welcher der kleinste ist ;-)?
– Martin Bassus 12.10.2009
|
|
| 1 |
Da das Array vorher sortiert wurde (asort), ist der Erste der "kleinste" und der Zweite der "größte" Schlüssel. Um die Schlüssel gezielt anzusprechen könnte man array_keys() verwenden.
Allerdings funktioniert das Ganze nur mit alphanumerischen Schlüsseln, da array_splice() numerische Schlüssel nicht erhält. Aber im gegeben Bsp. geht es ja um alphanumerische Schlüssel. – FalkP 12.10.2009
|
|
| 1 |
asort($array):
Array ( [vier] => 1 [eins] => 2 [zwei] => 5 [drei] => 7 ) array_splice($array, 1, -1): Array ( [vier] => 1 [drei] => 7 ) – lunatigs 12.10.2009
|
|
|
Die Frage ist nun, was passiert mit gleichgroßen Werten (also zwei größten oder x kleinsten Werten) ?
Da sollte "GuteFrage" mal ne Marschrichtung vorgeben. – MiW 20.10.2009
|
$kleinstezahl = min($array);
$groesstezahl = max($array);
|
|
$key_max = false;
$key_min = false;
foreach ($array as $key=>$val){
$key_max = $key_max===false || $array[$key_max]<$val ? $key : $key_max;
$key_min = $key_min===false || $array[$key_min]>$val ? $key : $key_min;
}
//$array[$key_min] => minimum
//$array[$key_max] => maximum
|
|
| 1 |
Wie du siehst handelt es sich hier nicht um Profis.. und die schreibweise mit ? und : ist wohl eher was für "Fortgeschrittene" ;-)
– Martin Bassus 12.10.2009
|
|
| 1 |
$maxVar = max($array);
$minVar = min($array);
$flipArray = array_flip($array);
echo $flipArray[$maxVar].': '.$maxVar.'<br />';
echo $flipArray[$minVar].': '.$minVar.'<br />';
|
|
| 1 | ||
|
Das funktioniert aber nur, wenn alle Werte eineindeutig sind, d.h. es keine Duplikate in den Werten und Schlüsseln gibt.
– tomahlak 23.10.2009
|
$min = $array[array_search(min($array), $array)];
$max = $array[array_search(max($array), $array)];
|
|
|
|
| 2 |
Schleifen werden nur ein bisschen aufwendig (i.e. inperformant) bei sehr großen arrays und/oder mehrfacherm Aufruf mit verschiedenen Arrays.
– MiW 20.10.2009
|
|
| 1 |
Ist das irgendwo bewiesen? Nach meinen kurzen Tests (mit kleinen Arrays) war eine eigene Schleifen-Lösung performanter als eine Umsetzung ohne Schleifen.
– Blauesocke 21.10.2009
|
<?php
$array['eins'] = 2;
$array['zwei'] = 5;
$array['drei'] = 7;
$array['vier'] = 1;
$temp_key_up=""; // Key der höchsten Zahl
$temp_zahl_up=""; // Höchste Zahl
$temp_key_down=""; // Key der kleinsten Zahl
$temp_zahl_down=""; // Kleinste Zahl
foreach($array as $key => $val)
{
if($val > $temp_zahl_up or $temp_zahl_up =="")
{
$temp_key_up=$key;
$temp_zahl_up=$val;
}
if($val <$temp_zahl_down or $temp_zahl_down =="")
{
$temp_key_down=$key;
$temp_zahl_down=$val;
}
}
echo "Höchste Zahl (Zahl/Key): ".$temp_zahl_up."/".$temp_key_up."<br>";
echo "Kleinste Zahl (Zahl/Key): ".$temp_zahl_down."/".$temp_key_down."<br>";
?>
|
|
| 1 |
foreach kopiert das Array vor der Iteration. Das kann ungünstig sein, wenn das Array sehr groß ist.
Die Abfrage mit OR ist aus irgendwie sinnlos. Initialisiere den Tempwert mit 0 nicht mit einem leeren String, dann brauchste auch OR nicht mehr – tomahlak 23.10.2009
|
|
| 1 |
Ups, nicht 0 sondern reset($array); zuerst und dann current($array) als Wert. Mein Fehler.
– tomahlak 23.10.2009
|
|
|