nächst kleineren array-key wählen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • nächst kleineren array-key wählen

    guten morgen liebe profis!

    in einem meiner scripte habe ich unter anderem folgendes array:
    PHP-Code:
    $kfr = array (
        
    => 1,
        
    => 2,
        
    => 3,
        
    10 => 4,
        
    12 => 5,
        
    15 => 6,
        
    20 => 7
    ); 
    ich bekomme jetzt von einem formular daten eines user übergeben, die dann berechnet werden und einen numerischen wert ergeben.
    dieser wert kann z.b. 3 sein.
    mein problem ist jetzt, das ich einen zugehörigen wert aus dem oberen array auslesen muss, und zwar den nächst kleineren zu der berechneten zahl. in diesem beispiel also key 2 = value 1.
    (die berechnete zahl bezieht sich auf den array-key, nicht auf den array-wert)

    wie stelle ich das am besten an?

    vielen dank für eure hilfe.
    grüße andyB.

  • #2
    erst mal sortieren mit ksort() mit foreach() durchgehen und prüfen und key() mit prev() liefert das vorherige element.
    Beantworte nie Threads mit mehr als 15 followups...
    Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

    Kommentar


    • #3
      Ist der Wert denn fortlaufend? Dann kannst du auch mit array_search($kfr[$item]-1) arbeiten

      Kommentar


      • #4
        momentan ist der wert noch fortlaufend.
        aber es kann durchaus sein, das sich das in zukunft ändert.

        zur verständlichung:
        die array-key sind jahre, die vals sind monate.
        das heißt, wenn etwas eine bestimmte anzahl an jahren [key] gedauert hat, hat es dann eine frist von [val] monaten.

        zu array_search() : das problem ist ja, das es nicht 2 oder 5 oder 8 jahre sind, sondern durchaus auch 3, 4, 6 oder 7 (usw.) ... sein kann. dann bin ich ja zwischen zwei array-keys.
        wenn z.b. 3 jahre erreicht sind, sind die 5 (nächster array-schlüssel) ja noch nicht voll. also soll das programm den wert mit dem schlüssel 2 nehmen.

        Kommentar


        • #5
          Dann kannst du trotzdem auf MelloPie`s Lösung aufsetzen. Das Array nach den Schlüsseln sortieren und in einer foreach-Schleife durchgehen und immer den Schlüssel merken. Stößt du irgendwann auf einen Schlüssel > dein Jahr, ist der zuletzt gemerkte Schlüssel dein Ergebnis.

          Kommentar


          • #6
            habs!
            vielen dank!

            meine (unsere) lösung:
            PHP-Code:
            error_reporting(E_ALL);

            $kfr = array (
                
            => 1,
                
            => 2,
                
            => 3,
                
            10 => 4,
                
            12 => 5,
                
            15 => 6,
                
            20 => 7
            );

            $jahr 7// Jahr zu Testzwecken
            $ausgabe null// Variable zur Ausgabe 
            ksort($kfr);

            foreach ( 
            $kfr as $key => $val ) {
                if ( 
            $jahr >= $key ) {
                    
            $ausgabe $key;
                }
                else {
                    break;
                }
            }

            echo 
            $ausgabe
            so tuts!

            grüße andyB.
            Zuletzt geändert von andyB; 20.12.2008, 00:33.

            Kommentar


            • #7
              Je nachdem, wie viele Einträge dein Array hat, macht es Sinn, schon direkt auszusteigen, wenn du die Ausgabe gefunden hast, d.h. ein:
              PHP-Code:
              else {
                  break;

              macht da Sinn.
              Wenn die Werte übrigens schon sortiert ankommen, kannst du dir das ksort aus Performancegründen sparen.

              Kommentar

              Lädt...
              X