Eerste array-key van element hoger dan X

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Peter Sanders

Peter Sanders

24/11/2011 16:32:34
Quote Anchor link
Hallo,

Ik heb een array als volgt:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<? $prijzen = array();
$prijzen['09:00:00'] = 100;
$prijzen['09:01:00'] = 102;
$prijzen['09:02:00'] = 97;
$prijzen['09:03:00'] = 94;
$prijzen['09:04:00'] = 104; ?>

Nu probeer ik een lus te maken waarin ik de resultaten krijg van het eerste element (of hoe noem je een record in een array?) die hoger is dan X OF lager is dan Y. De volgende code heb ik nu geschreven:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<? $hoger_dan = 101;
$lager_dan = 95;

foreach($prijzen as $tijd => $prijs){
    if ($prijs > $hoger_dan OR $prijs < $lager_dan){
        echo $tijd." en ".$prijs."<br>";    
    }
}
?>

Dit geeft dus het volgende als resultaat:
09:01:00 en 102
09:03:00 en 94
09:04:00 en 104

Daaruit kan ik aflezen dat de bovenste (dus de eerste) het antwoord is. Op zich bereik ik dus wel wat ik wil. Ik zou echter graag hebben dat de lus maar één antwoord geeft; namelijk het eerste. Het liefst zou ik daarnaast ook nog hebben dat de lus onmiddellijk stopt wanneer hij het eerste record heeft gevonden wat voldoet aan de voorwaarden.

Om het nog iets duidelijker te maken; in sql zou ik dus iets zeggen als
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<? SELECT tijd
FROM array
WHERE prijs > $hoger_dan
OR prijs < $lager_dan
ORDER BY tijd ASC
LIMIT 1 ?>

Is er een simpele manier om dit met een array te doen? Misschien moet het helemaal niet met een foreach loop, maar ik zou niet zo goed weten waarmee dan wel. Iemand anders toevallige wel? Alle tips zijn welkom!
Gewijzigd op 24/11/2011 16:41:37 door Peter Sanders
 
PHP hulp

PHP hulp

22/11/2024 15:10:38
 
Jelle -

Jelle -

24/11/2011 16:40:18
Quote Anchor link
http://php.net/break

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
    for($i = 0; $i < 100; $i++){
        if($i == 50){
            break; //ga weg uit de lus
        }
    }

    echo $i; //dit zal 50 terug geven
?>
 
Peter Sanders

Peter Sanders

24/11/2011 16:57:51
Quote Anchor link
Ah, dank! Break, kende ik niet!

Ik heb het als volgt opgelost:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?
$hoger_dan
= 101;
$lager_dan = 95;

foreach($prijzen as $tijd => $prijs){
    if ($prijs > $hoger_dan OR $prijs < $lager_dan){
        $limiet = $tijd." en ".$prijs."<br>";    
    }

    if(isset($limiet)){
        break;
    }
}

echo $limiet;
?>


Dank voor de snelle oplossing!


EDIT:
Ik zie nu dat die tweede if-natuurlijk helemaal niet nodig is. Voor mensen die dit later dus nog lezen, hierbij de meer logische versie:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?
$hoger_dan
= 101;
$lager_dan = 95;

foreach($prijzen as $tijd => $prijs){
    if ($prijs > $hoger_dan OR $prijs < $lager_dan){
        $limiet = $tijd." en ".$prijs."<br>";
        break;
    }
}

echo $limiet;
?>


@ Vincent hieronder. Ik zie nu ook dat jij dit suggereerde. Dank nog voor je suggestie, maar met trots kan ik zeggen dat ik dit zelf had bedacht.. :D
Gewijzigd op 24/11/2011 20:37:47 door Peter Sanders
 
Vincent Huisman

Vincent Huisman

24/11/2011 19:16:43
Quote Anchor link
waarom stop je de break niet bij de eerste if in?
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.