Hallo,

Ik heb een array als volgt:
<? $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:
<? $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
<? 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!
http://php.net/break


<?php
	for($i = 0; $i < 100; $i++){
		if($i == 50){
			break; //ga weg uit de lus
		}
	}
	echo $i; //dit zal 50 terug geven
?>
Ah, dank! Break, kende ik niet!

Ik heb het als volgt opgelost:
<?
$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:
<?
$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
waarom stop je de break niet bij de eerste if in?

Reageren