maximaler Wert eines key aus 2d array ?
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
abfragen
array
aufruf
beispiel
code
dank
datensatz
eigen funktion
eigentlichen aufruf
einheitliches bild
element
ergebnis
ermitteln
ersetzen
frage
funktion
packen
tippfehler
url
vorhandene funktionen
-
Hallo
ich habe ein 2D Array, zum Beispiel
$data[0] = array( 'id' = 1, 'name' = 'aaa', 'count' => 24), $data[1] = array( 'id' = 2, 'name' = 'bbb', 'count' => 15), $data[2] = array( 'id' = 3, 'name' = 'ccc', 'count' => 32), $data[3] = array( 'id' = 4, 'name' = 'ddd', 'count' => 11),
EDIT: ... dieses Array ist so natürlich Falsch, richtige Schreibweise siehe unten !
Wenn ich den maximalen Wert von 'id' ermitteln will,
dann klappt das ganz gut mit
$id_max = max(array_map('current', $array));
Ergebnis ist 4, also funktioniert
also diese current Funktion holt wohl einfach das jewils erste Element aus dem 2D-Array ?
ABER ... Frage ... wie bekomme ich anstat den maximalen Wert von 'id'
einen anderen maximalen Wert von einem beliebigen 'key' aus dem 2D Array
also hier im Bsp ... wie bekomme ich den maximalen Wert von 'count'
... irgendwie bei array_map das 'current' durch andere Funktion ersetzen?
... aber wie / welche?
Danke
Beitrag zuletzt geändert: 4.9.2014 7:36:13 von gamebox -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
hallo gamebox,
ich mein array_map erwartet eine Funktion an erster Stelle,
nun sind count oder current oder max vorhandene Funktionen in php,
also:
das array:
$data[0] = array( 'id' => 1, 'name' => 'aaa', 'count' => 24); $data[1] = array( 'id' => 2, 'name' => 'bbb', 'count' => 15); $data[2] = array( 'id' => 3, 'name' => 'ccc', 'count' => 32); $data[3] = array( 'id' => 4, 'name' => 'ddd', 'count' => 11);
dann führt:
print_r(array_map('max',$data));
zu einem neuen array mit den größten werte des jeweiligen "Unter"arrays (nenn es datensatz)
Array ( [0] => 24 [1] => 15 [2] => 32 [3] => 11 )
und
echo max(array_map('max',$data));
wieder zu dem größten Wert der jeweils größten Werte je "Unter"array (nenn es datensatz)
32
Du weißt dann aber nicht mehr die 'ID' und wenn z.B. die 'ID' = 100 ist, dann wäre das momentan der höchste Wert....
Ich glaube Du solltest eine eigen Funktion schreiben (wie in den php manuals beschrieben, ;) ) und dann gezielt 'id' und 'count' abfragen/vergleichen/merken.
<?php
function cube($n)
{
return($n * $n * $n);
}
$a = array(1, 2, 3, 4, 5);
$b = array_map("cube", $a);
print_r($b);
?>
http://de1.php.net/manual/de/function.array-map.php
cu
harro -
hallo
hmm, also mit array_map bekomme ich es nicht hin
hier nochmal der Beispiel Datensatz (ohne Fehler wie oben)
// ------------------------------------------------------------ $data = array(); $data[0] = array( 'id' => 1, 'name' => 'aaa', 'count' => 24, 'egal' => 3 ); $data[1] = array( 'id' => 2, 'name' => 'bbb', 'count' => 15, 'egal' => 7 ); $data[2] = array( 'id' => 3, 'name' => 'ccc', 'count' => 32, 'egal' => 2 ); $data[3] = array( 'id' => 4, 'name' => 'ddd', 'count' => 11, 'egal' => 3 ); // ------------------------------------------------------------
... nur mit foreach
// ------------------------------------------------------------ function get_maxkey2($arr, $key) { foreach($arr as $itm) { $tmp[] = $itm[$key]; } return max($tmp); } $maxv2 = get_maxkey2($data, 'egal'); print '<p>'. $maxv2 .'</p>'."\n"; // ------------------------------------------------------------
aber mit array_map klappt es nur so
// ------------------------------------------------------------ $func = function($data, $key='count') { return($data[$key]); }; $tmp1 = array_map($func, $data); $maxv1 = max($tmp1); print '<p>'. $maxv1 .'</p>'."\n"; // ------------------------------------------------------------
sobald ich versuche, das mit array_map in eine funktion zu packen, geht es nicht ?!?
weil ich den gewünschen (variablen) Key-Name nicht per Funktions-Aufruf rein bekomme
also ich will das
nicht fest drin stehen haben,$key='count'
sondern so wie bei dem oben mit foreach als / beim Funktions-Aufruf übergeben
EDIT ... habs glaub doch hinbekommen ... mit array_map in einer funktion
// ------------------------------------------------------------ function get_maxkey3($arr, $key) { $func = function($arr, $key) { return($data[$key]); }; $tmp1 = array_map($func, $data); return max($tmp1); } $maxv3 = get_maxkey2($data, 'count'); print '<p>'. $maxv3 .'</p>'."\n"; // ------------------------------------------------------------
ist noch die Frage, was besser (schneller) ist, mit foreach oder mit array_map
?
Beitrag zuletzt geändert: 3.9.2014 21:05:10 von gamebox -
Hi,
kann gerade nicht den eigentlichen Aufruf der Funktion get_maxkey3 sehen...
eigentlich meinte ich mit funktionsaufruf
function bla (){ } $keineahnung=array_map(bla,$array);
Thema was ist schneller...., bisher habe ich kein einheitliches Bild im netz gefunden.
Offensichtlich hängt es von Deinem "Verschachtelungsgrad" ab.
Persönlich weiß ich mit foreach in jedem Fall eher was ich tue.
gruß
harro -
ja ups, Tippfehler ... Aufruf der Funktion get_maxkey3
das
$maxv3 = get_maxkey2($data, 'count'); print '<p>'. $maxv3 .'</p>'."\n";
muss natürlich so:
$maxv3 = get_maxkey3($data, 'count'); print '<p>'. $maxv3 .'</p>'."\n";
... aber bei dem array_map "Ein-Zeiler" habe ich dann das Problem,
das ich nicht die ID des Array-Elements mit max-Count-Wert bekomme
Danke
Beitrag zuletzt geändert: 3.4.2015 11:37:51 von gamebox -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage