Hallo,


Ik ben al wel een tijd bezig met php, maar heb nooit echt iets met arrays gedaan. Nu wil ik wat wiskunde gaan doen met php en een soort van voorwaardes in een foreach-lus zetten die vergelijkbaar zijn met een WHERE-clausule uit een sql-query.

Ik zet om te beginnen een veld uit een databank in een array. Vervolgens draai ik daar een foreach-lus overheen waarin ik alle data die niet aan mijn voorwaardes voldoen weer uit het array haal. Uiteindelijk print ik het array weer om te kijken wat er in zit.

$SlotArray = array();
$sql = "SELECT * FROM aex";
$exec_sql = mysql_query($sql) or die("Foutmelding: ".mysql_error());
while($z = mysql_fetch_assoc($exec_sql)){ 
	$SlotArray[$z['Datum']] = $z['Slot'];
}
reset($SlotArray);
foreach($SlotArray as $waarde){
	if($waarde > 300 OR $waarde < 290){
		unset($SlotArray[key($SlotArray)]);
	}
}
print_r($SlotArray);

De eerste 10 resultaten van het array zijn echter de volgende:

[1983-01-03] => 45.38
[2011-02-25] => 366.77
[2011-02-28] => 369.13
[2011-03-01] => 367.95
[2011-03-02] => 364.86
[2011-03-03] => 367.60
[2011-03-04] => 367.95
[2011-03-07] => 366.08
[2011-03-08] => 366.38
[2011-03-09] => 366.25

Er zit dus ergens iets fout. Ik begrijp echter absoluut niet waar. Heeft iemand enig idee waar ik fout zit?

ps. Ik weet dat ik natuurlijk ook gewoon een "WHERE Slot < 300 AND Slot > 290" kan toevoegen aan de sql-query. In een later stadium in mijn berekeningen zal dat echter niet meer kunnen. Bovendien wil ik ook gewoon wat meer leren werken met arrays.. :-)

<?php
$temparray = array_diff_key($aex, $dowjones);
foreach ($temparray as $key => $value) unset($aex[$key]);
?>
@SanThe
Ik had jouw reacties nog niet gezien toen ik mijn bovenstaande reactie schreef. Jouw oplossing ziet er inderdaad wel erg goed uit. Ik ga er eens wat tests mee doen.

Ik kwam ook nog de functie array_key_exists tegen. Misschien dat ik het daarmee ook wel zou kunnen doen?

Ik heb in ieder geval weer genoeg lees- en probeerwerk.. :-)

Dank aan jullie beiden!
@Santhe
Ziet er goed uit, alleen blijft het wel de vraag hoe snel het is. Weet jij hoe in_array (net als isset) werkt?
Mijn ervaring met een aantal voorgebouwde php array functies is is dat ze geweldig werken op kleine arrays, maar zodra het een beetje groot wordt (in de orde van 100.000 elementen) dan wordt het erg langzaam.

Reageren