kostenloser Webspace werbefrei: lima-city


maximaler Wert eines key aus 2d array ?

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    gamebox

    gamebox hat kostenlosen Webspace.

    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
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. 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
  4. Autor dieses Themas

    gamebox

    gamebox hat kostenlosen Webspace.

    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
    $key='count'
    nicht fest drin stehen haben,
    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
  5. 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
  6. Autor dieses Themas

    gamebox

    gamebox hat kostenlosen Webspace.

    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
  7. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!