Weergegeven resultaten: 1 t/m 20 van 20
  1. #1
    Member Black Night's schermafbeelding
    Lid sinds
    18/07/02
    Locatie
    Belgie
    Berichten
    1.218
    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.722
    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.218
    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 

  5. #5
    Member Black Night's schermafbeelding
    Lid sinds
    18/07/02
    Locatie
    Belgie
    Berichten
    1.218
    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.330
    iTrader
    2 (100%)
    en waarom zou er daarvoor geen functie voor zijn?
    http://php.net/max

  7. #7
    Member Black Night's schermafbeelding
    Lid sinds
    18/07/02
    Locatie
    Belgie
    Berichten
    1.218
    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.722
    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.330
    iTrader
    2 (100%)
    ah, sorry, khad de vraag verkeerd begrepen

  10. #10
    Member Black Night's schermafbeelding
    Lid sinds
    18/07/02
    Locatie
    Belgie
    Berichten
    1.218
    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.218
    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.722
    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.218
    iTrader
    0
    even eens uw code ontleden, want da ziet er mij al vrij staffe toebak uit

    Danke voor de info

  16. #16
    Member
    Lid sinds
    12/10/02
    Locatie
    Gent
    Berichten
    14.722
    iTrader
    2 (100%)
    Citaat Oorspronkelijk geplaatst door Jos_Albatros
    $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 ..
    moete daarom gans nieuwe code geven en doen alsof ge et zelf gevonde hebt terwijl ge gewoon mijn opl. kopieert met iets ingewikkelder en tergend veel tragere structuur .
    tis idd
    $array=$levelarray;
    ksort($levelarray);

    en fyi: der is implicit casting bij php

  17. #17
    Member Jos_Albatros's schermafbeelding
    Lid sinds
    2/07/05
    Locatie
    antwerpen 2018
    Berichten
    465
    iTrader
    1 (100%)
    Citaat Oorspronkelijk geplaatst door killgore
    moete daarom gans nieuwe code geven en doen alsof ge et zelf gevonde hebt terwijl ge gewoon mijn opl. kopieert
    lol man, ik post hier gewoon MIJN oplossing hoe IK het zou doen,
    denkt gij nu echt dat ik die paar regeltjes van u kopieer en dan keihard lig na te denken om het een beetje te camoufleren om u zo te kloten,
    haha
    Citaat Oorspronkelijk geplaatst door killgore
    met iets ingewikkelder en tergend veel tragere structuur
    gij kunt nanoseconden tellen ofwa ? cool
    ---
    goe bezig man, echt GOE bezig

  18. #18
    Member zero2one's schermafbeelding
    Lid sinds
    6/09/02
    Locatie
    Oudenaarde
    Berichten
    188
    iTrader
    0
    euh, ik wil niet muggeziften maar...
    PHP-code:
    $basiclevelarray = array("1"=>"0""10"=>"5""11"=>"50""12"=>"100", ...);
    function 
    getlevel($nr,$levelarray=null)
    {
        if(!isset(
    $levelarray) && isset($basiclevelarray)) $le... 
    zal niet werken daar $basiclevelarray buiten de functie staat...
    PHP-code:
    $basiclevelarray = array("1"=>"0""10"=>"5""11"=>"50""12"=>"100", ...);
    function 
    getlevel($nr,$levelarray=null)
    {
        global 
    $basiclevelarray;
        if(!isset(
    $levelarray) && isset($basiclevelarray)) $le... 
    zal het wel doen

  19. #19
    Member
    Lid sinds
    12/10/02
    Locatie
    Gent
    Berichten
    14.722
    iTrader
    2 (100%)
    Citaat Oorspronkelijk geplaatst door zero2one
    euh, ik wil niet muggeziften maar...
    zal niet werken daar $basiclevelarray buiten de functie staat...
    zal het wel doen
    sjust . aangepast, blijkbaar veel domme fouten gemaakt vandaag .

  20. #20
    Member
    Lid sinds
    12/10/02
    Locatie
    Gent
    Berichten
    14.722
    iTrader
    2 (100%)
    Citaat Oorspronkelijk geplaatst door Jos_Albatros
    lol man, ik post hier gewoon MIJN oplossing hoe IK het zou doen,
    denkt gij nu echt dat ik die paar regeltjes van u kopieer en dan keihard lig na te denken om het een beetje te camoufleren om u zo te kloten,
    haha

    gij kunt nanoseconden tellen ofwa ? cool
    ---
    goe bezig man, echt GOE bezig
    srry @ mods dak even bovenhaal, kwas vergeten dak men vorige reply hierop gedelete had.

    Wat ik bedoelde was da gij gewoon wou opscheppen: kijk ik kan het ook, terwijl dat voor niets nodig was aangezien er al vrij perfect antwoord bovenstond, buiten die 2 fouten in de functie-vorm die puur kwamen omdat ik het gewoon in de browser zelf had getypt en nooit men code had getest. Maar nee, ipv mijn code te verbeteren moet je eventjes snel zelf een code-vb geven met enkele rare constructies om te tonen dat je wel goed php kan. De reden wrom ik zei dat je mijn code gewoon had aangepast was het gebruik van for each en die functies van jou. Met gebruik van array_keys e.d. ga je zeer vaak via for op numerical index iteraten en NIET via foreach .

    en ja ik kan nano-seconden tellen , uw code is beduidend trager, da ziet iedereen die een beke kan coden.

    edit: fyi: onleesbare combinaties van array-functies maken wilt niet zeggen dat je goed kan coden .
    Laatst gewijzigd door killgore; 9 januari 2006 om 16:54

Discussie informatie

Users Browsing this Thread

Op dit moment bekijken 1 gebruikers deze discussie. (0 leden en 1 gasten)

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
  •