Pagina 1 van 2 12 LaatsteLaatste
Weergegeven resultaten: 1 t/m 15 van 20
  1. #1
    Member Black Night's schermafbeelding
    Lid sinds
    18/07/02
    Locatie
    Belgie
    Berichten
    1.241
    iTrader
    0

    PHP: De hoogste waarde uit array nemen

    llo

    Ik zou een bepaalde waarde willen laten afhangen van het aantal objecten dat een gebruiker in een database heeft. Voorbeeld:

    0 objecten => gebruiker krijgt waarde 1
    5 objecten => gebruiker krijgt waarde 10
    50 objecten => gebruiker krijgt waarde 11
    100 objecten => gebruiker krijgt waarde 12
    ...

    Ik heb dit in een array geplaatst. Voorbeeld:

    array("1"=>"0", "10"=>"5", "11"=>"50", "12"=>"100", ...);


    Hoe kan ik nu de hoogste key selecteren? Bv als de gebruiker 50 tot 99 objecten heeft, moet hij key 11 krijgen. Meestal neemt hij de laagste waarde

    Indien de array beter omgekeerd is: geen probleem

    Dank bij voorbaat

  2. #2
    Member
    Lid sinds
    12/10/02
    Locatie
    Gent
    Berichten
    14.721
    iTrader
    2 (100%)
    mja, die 50 tot 99 objecten, hoe sla je dat op?
    als je het als $aantalobjecten opslaat:
    PHP-code:
    foreach($array as $key =>$value)
    {
        if(
    $aantalobjecten<$value) break;
        
    $hoogste_key $key;

    op voorwaarde dat je array gesorteerd is naar oplopende key: ksort($array);

  3. #3
    Member Black Night's schermafbeelding
    Lid sinds
    18/07/02
    Locatie
    Belgie
    Berichten
    1.241
    iTrader
    0
    Is er echt geen functie die daaraan beantwoordt?

    Ik heb hier ook bezig gezeten met een loop, maar als de array wat lang wordt, kan het zijn dat die loop vrij lang moet zoeken...

    In alle geval: danku

  4. #4
    Member taLa.'s schermafbeelding
    Lid sinds
    3/01/06
    Locatie
    Gent
    Berichten
    435
    iTrader
    0
    PHP-code:
    define("_NL""<br/>\n");

    $map = array(
        array(
    10),
        array(
    105), 
        array(
    1150),
        array(
    12100),
    );

    function 
    getLevel($number){
        
        global 
    $map;
        
    $res = -1;
        
    $cnt count($map);
        
        for(
    $i=0;$i<$cnt;$i++){
            if(
    $i $cnt-1){
                if(
    $number >= $map[$i][1] && $number $map[$i+1][1]){
                    
    $res $map[$i][0];
                    break;
                }
            } else {
                if(
    $number >= $map[$i][1]){
                    
    $res $map[$i][0];
                    break;
                }
            }
        }
        
        return 
    $res;
        
    }

    echo 
    "0: ".getLevel(0)._NL;                // 1
    echo "7: ".getLevel(7)._NL;                // 10
    echo "49: ".getLevel(49)._NL;            // 10
    echo "50: ".getLevel(50)._NL;            // 11
    echo "99: ".getLevel(99)._NL;            // 11
    echo "100: ".getLevel(100)._NL;            // 12
    echo "1000: ".getLevel(1000)._NL;        // 12 
    $0.02

  5. #5
    Member Black Night's schermafbeelding
    Lid sinds
    18/07/02
    Locatie
    Belgie
    Berichten
    1.241
    iTrader
    0
    Er zit blijkbaar geen andere oplossing op dan een loop te nemen.

    Bedankt voor de hulp!

  6. #6
    Approved 9-lifer GuntherDW's schermafbeelding
    Lid sinds
    17/07/02
    Locatie
    Burcht
    Berichten
    4.309
    iTrader
    2 (100%)
    en waarom zou er daarvoor geen functie voor zijn?
    http://php.net/max
    [ Deskie ] || [ AniDB Mylist ]
    You installed K-Lite codec pack? - CCCP
    23 october 2007 : The day music died

  7. #7
    Member Black Night's schermafbeelding
    Lid sinds
    18/07/02
    Locatie
    Belgie
    Berichten
    1.241
    iTrader
    0
    Deze functie werkt toch niet als de waarde niet in de array zit?

  8. #8
    Member
    Lid sinds
    12/10/02
    Locatie
    Gent
    Berichten
    14.721
    iTrader
    2 (100%)
    Citaat Oorspronkelijk geplaatst door GuntherDW
    en waarom zou er daarvoor geen functie voor zijn?
    http://php.net/max
    omdat dat niet is wat hij vroeg , gij haalt gewoon grootste waarde uit array .

    en tala., wtf maakt gij da zo ingewikkeld als ik hier al veel simpelere versie had gepost ?
    in functie gegoten:
    PHP-code:
    $basiclevelarray = array("1"=>"0""10"=>"5""11"=>"50""12"=>"100", ...);
    function 
    getlevel($nr,$levelarray=null)
    {
        global 
    $basiclevelarray;
        if(!isset(
    $levelarray) && isset($basiclevelarray)) $levelarray=$basiclevelarray;
        else return 
    0;
        
    $array ksort($levelarray);
        
    reset($array);
        foreach(
    $array as $key =>$value)
        {
            if(
    $aantalobjecten<$value) return $level;
            
    $level $key;
        }

    kbetwijfel da ge aan die laatste veel mis kunt doen en is vrij extreem algemeen
    Laatst gewijzigd door killgore; 6 januari 2006 om 23:04

  9. #9
    Approved 9-lifer GuntherDW's schermafbeelding
    Lid sinds
    17/07/02
    Locatie
    Burcht
    Berichten
    4.309
    iTrader
    2 (100%)
    ah, sorry, khad de vraag verkeerd begrepen
    [ Deskie ] || [ AniDB Mylist ]
    You installed K-Lite codec pack? - CCCP
    23 october 2007 : The day music died

  10. #10
    Member Black Night's schermafbeelding
    Lid sinds
    18/07/02
    Locatie
    Belgie
    Berichten
    1.241
    iTrader
    0
    Ok, ik heb reeds een variant van killgore's functie gescript en werkt nu tiptop

    Bedankt voor de reacties!

  11. #11
    Member Jos_Albatros's schermafbeelding
    Lid sinds
    2/07/05
    Locatie
    antwerpen 2018
    Berichten
    465
    iTrader
    1 (100%)
    combineer gewoon max() en array_keys () ...

  12. #12
    Member Black Night's schermafbeelding
    Lid sinds
    18/07/02
    Locatie
    Belgie
    Berichten
    1.241
    iTrader
    0
    dan moet je toch ook nog altijd ieder aantal objecten in de array zetten?

  13. #13
    Member
    Lid sinds
    12/10/02
    Locatie
    Gent
    Berichten
    14.721
    iTrader
    2 (100%)
    Citaat Oorspronkelijk geplaatst door Jos_Albatros
    combineer gewoon max() en array_keys () ...
    werkt ook niet, hij heeft de waarde die hij zoekt niet noodzakelijk als key staan, de loops die hier gepost staan zijn echt enige oplossingen hoor .

  14. #14
    Member Jos_Albatros's schermafbeelding
    Lid sinds
    2/07/05
    Locatie
    antwerpen 2018
    Berichten
    465
    iTrader
    1 (100%)
    Citaat Oorspronkelijk geplaatst door killgore
    werkt ook niet, hij heeft de waarde die hij zoekt niet noodzakelijk als key staan, de loops die hier gepost staan zijn echt enige oplossingen hoor .
    idd, ni genoeg gelezen

    @ uw voorbeeld, dit stukje :

    $array = ksort($levelarray);
    reset($array);
    foreach($array as $key =>$value)

    ksort returned 1 of 0 terug, geen key-gesorteerde array,
    $array is dus een int, dus die foreach zal niet werken ..

    @ Black Night

    maak van u gegevens in u array integers, anders kunt ge niet vergelijken

    een oplossing :
    PHP-code:
    <?

    $list 
    = array (=> 010 => 511 => 5012 => 100);

    function 
    ($i) {

        global 
    $list;

        foreach (
    $list as $key => $value) {
            if (
    $value $i) {
                
    $keys array_keys ($list);
                return 
    $keys [array_search (array_search ($value$list), $keys) - 1];
            }
        }
    }

    print 
    (0); // 1
    print (1); // 1
    print (4); // 1
    print (5); // 10
    print (6); // 10

    ?>

  15. #15
    Member Black Night's schermafbeelding
    Lid sinds
    18/07/02
    Locatie
    Belgie
    Berichten
    1.241
    iTrader
    0
    even eens uw code ontleden, want da ziet er mij al vrij staffe toebak uit

    Danke voor de info

Pagina 1 van 2 12 LaatsteLaatste

Regels voor berichten

  • Je mag geen nieuwe discussies starten
  • Je mag niet reageren op berichten
  • Je mag geen bijlagen versturen
  • Je mag niet je berichten bewerken
  •