1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | $from['Lat'] = 51.5007359; $from['Lng'] = 3.6112547; $iRadius = 100; $istartlat = $from['Lat']; $istartlong = $from['Long']; $LatRange = ($iRadius / ((6076 / 5280) * 60)); $floatthis = ($iStartLat * 3.141592653589 / 180); $LongRange = ($iRadius / (((cos(settype($floatthis, "float")) * 6076.) / 5280.) * 60)); $LowLatitude = ($istartlat - $LatRange); $HighLatitude = ($istartlat + $LatRange); $LowLongitude = ($istartlong - $LongRange); $HighLongitude = ($istartlong + $LongRange); echo " SELECT * FROM cor WHERE cor.Lat <= $HighLatitude AND cor.Lat >= $LowLatitude AND cor.Lng >= $LowLongitude AND cor.Lng <= $HighLongitude "; ?> |
quote:Pi is often usefull in con/sin/tan functions..
There are also other Pi related constants.
These are most of them:
M_PI = 3.14159265358979323846 // pi
// The following were added in PHP 4.0.0
M_PI_2 = 1.57079632679489661923 // pi/2
M_PI_4 = 0.78539816339744830962 // pi/4
M_1_PI = 0.31830988618379067154 // 1/pi
M_2_PI = 0.63661977236758134308 // 2/pi
M_SQRTPI = 1.77245385090551602729 // sqrt(pi) (Only in PHP 4.0.2+)
M_2_SQRTPI = 1.12837916709551257390 // 2/sqrt(pi)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | function getRadiusCords($radius, $startLat, $startLong){ $radius = ($radius * 0.50); $latRange = ($radius / ((6076 / 5280) * 60)); $floatthis = ($startLat * pi() / 180); $longRange = ($radius / (((cos(settype($floatthis,"float")) * 6076.8) / 5280) * 60)); return "( cor.Lat <= ".($startLat + $latRange)." AND cor.Lat >= ".($startLat - $latRange)." AND cor.Lng >= ".($startLong - $longRange)." AND cor.Lng <= ".($startLong + $longRange)." )"; } ?> |
Korte tip: de constanten gebruiken is altijd beter als weer een extra functieaanroep (performance-wise).. Dat geldt voor wel meer dingen in PHP... __CLASS__ in plaats van get_class($this), PHP_VERSION in plaats van phpversion(), en dat soort dingenquote:Op zondag 21 juni 2009 14:23 schreef Light het volgende:
Er is ook een functie pi()
Uit het commentaar daar:
[..]
En afgezien daarvan vind ik pi() en M_PI beter leesbaar dan 3.14159265358979323846quote:Op maandag 22 juni 2009 00:32 schreef Intrepidity het volgende:
[..]
Korte tip: de constanten gebruiken is altijd beter als weer een extra functieaanroep (performance-wise).. Dat geldt voor wel meer dingen in PHP... __CLASS__ in plaats van get_class($this), PHP_VERSION in plaats van phpversion(), en dat soort dingen
Tevens goed gemaskeerde TVP
Ach, ik heb wel eens gekker gezien hoorquote:Op maandag 22 juni 2009 09:01 schreef Light het volgende:
[..]
En afgezien daarvan vind ik pi() en M_PI beter leesbaar dan 3.14159265358979323846
1 |
Het werkt sowieso gewoon niet. In de eerste plaats selecteer je postcodes uit een 'vierkant', en niet binnen een cirkel. Ten tweede is de aarde een bol, en lopen de meridianen niet parallel. Wat je kunt doen is de range vrij groot houden, en dan in een postprocessing stap alle postcodes die je terugkrijgt nog even te checken door de daadwerkelijke afstand uit te rekenen. Hoe je dat doet staat hier:quote:Op zondag 21 juni 2009 14:43 schreef Likkende_Lassie het volgende:
@light, thanks,
Functie is nu als volgt geworden:
[ code verwijderd ]
Lijkt nu 100% te werken. Toch nog even goed testen
Wat ik wel erg raar vind, is dat ik de $radius moet vermenigvuldigen met 0.50 zodat ik kilometers kan gebruikenErgens moet er dan iets fout zijn, want eigenlijk zou ik het moeten vermenigvuldigen met 0.62
Ik hoop van harte dat PHP niet zo brak is, dat dat het geval is.quote:Op maandag 22 juni 2009 00:32 schreef Intrepidity het volgende:
Korte tip: de constanten gebruiken is altijd beter als weer een extra functieaanroep (performance-wise).
Hoezo? constanten staan altijd in geheugen.. Functieaanroep betekent extra dingen op de stack, geheugenlocatie veranderen, uitvoeren van die functie, terugspringen naar vorige locatie.. Dat is in iedere taal zo.. Functieaanroepen geven nou eenmaal overhead omdat ze aanzienlijk complexer zijn dan even een variabele uit het geheugen vissen.. Je moet gewoon geen functies gebruiken voor enkele regels code en dat soort ongein.. Waarschijnlijk doet pi() niets anders dan return M_PI;quote:Op maandag 22 juni 2009 11:33 schreef Catbert het volgende:
[..]
Ik hoop van harte dat PHP niet zo brak is, dat dat het geval is.
1 2 3 4 5 6 7 8 | <td width="327"> <select name="name" type="text" class="tabel" id="name"> <option>jongen</option> <option>meisje</option> </td> </tr> |
1 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <td width="47"><label for="age" class="lettertype"><?php echo JText::_('AGE'); ?></label></td> <td width="327"> <select name="age" type="text" class="tabel" id="age" size="1" maxlength="2" /> <option>10</option> <option>11</option> <option>12</option> <option>13</option> <option>14</option> <option>15</option> <option>16</option> <option>17</option> <option>18</option> <option>19</option> <option>20</option> </td> </tr> |
1 |
quote:Op maandag 22 juni 2009 13:07 schreef cablegunmaster het volgende:
ik bedoel we echoeen het in een textarea we hebben al <br> en nu willen we dat die enters veroorzaken ipv /n
is hier iets mogelijk voor?
want hij echo't plaint text.
1 2 3 4 5 6 7 8 9 10 11 12 | /** * Convert BR tags to nl * * @param string The string to convert * @return string The converted string */ function br2nl($string) { return preg_replace('/\<br(\s*)?\/?\>/i', "\n", $string); } ?> |
Al sinds C worden simpele functies geinlined, dit geldt ook voor functies waar hele simpele berekeningen gedaan worden. Je moet de compiler / runtime lekker dat soort optimalisaties laten doen. Moeilijk gaan doen over een functieaanroep is gewoon premature optimization. Helemaal als het ten koste gaat van leesbaarbeid (__CLASS__ is een goed voorbeeld, WTF?) is het gewoon een slecht idee.quote:Op maandag 22 juni 2009 11:47 schreef Intrepidity het volgende:
Hoezo? constanten staan altijd in geheugen.. Functieaanroep betekent extra dingen op de stack, geheugenlocatie veranderen, uitvoeren van die functie, terugspringen naar vorige locatie.. Dat is in iedere taal zo..
quote:Op maandag 22 juni 2009 13:21 schreef Swetsenegger het volgende:
[..]
1
2
3
4
5
6<?php
function br2nl($string)
{
return preg_replace('/\<br(\s*)?\/?\>/i', "\n", $string);
}
?>
1 2 3 4 5 6 | function br2nl($string) { return preg_replace('/\<br\s*\/?\>/i', "\n", $string); } ?> |
Maar ik selecteer helemaal geen postcodes, maar coordinaten.quote:Op maandag 22 juni 2009 11:27 schreef Catbert het volgende:
[..]
Het werkt sowieso gewoon niet. In de eerste plaats selecteer je postcodes uit een 'vierkant', en niet binnen een cirkel. Ten tweede is de aarde een bol, en lopen de meridianen niet parallel. Wat je kunt doen is de range vrij groot houden, en dan in een postprocessing stap alle postcodes die je terugkrijgt nog even te checken door de daadwerkelijke afstand uit te rekenen. Hoe je dat doet staat hier:
http://www.movable-type.co.uk/scripts/gis-faq-5.1.html
Oh, en dat je door 0.5 moet delen komt waarschijnlijk doordat uitgegaan wordt van zeemijlen i.p.v. landmijlen. Een zeemijl is 1.85 km ongeveer, en komt dus dicht bij 2km. Je factor zou dus 1/1.85 = 0.54 moeten zijn.
En toch scheelt het 20-25%:quote:Op maandag 22 juni 2009 15:16 schreef Catbert het volgende:
[..]
Al sinds C worden simpele functies geinlined, dit geldt ook voor functies waar hele simpele berekeningen gedaan worden. Je moet de compiler / runtime lekker dat soort optimalisaties laten doen. Moeilijk gaan doen over een functieaanroep is gewoon premature optimization. Helemaal als het ten koste gaat van leesbaarbeid (__CLASS__ is een goed voorbeeld, WTF?) is het gewoon een slecht idee.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | // Constante $timestart = microtime(); for($i = 0; $i < 10000; $i++) { $pi = M_PI; } $timeconst = (microtime() - $timestart); echo "Tijd voor 10.000 x constante: " . $timeconst . "<br />"; // Functieaanroep $timestart = microtime(); for($i = 0; $i < 10000; $i++) { $pi = pi(); } $timefunc = (microtime() - $timestart); echo "Tijd voor 10.000 x functieaanroep: " . $timefunc . "<br />"; echo "Factor func. vs const.: " . $timefunc / $timeconst; ?> |
1 2 3 | Tijd voor 10.000 x functieaanroep: 0.0015500000000001 Factor func. vs const.: 1.2409927942355 |
Waarschijnlijk is je encoding nog gewoon ASCII of UTF-8 (ook al zegt je instruction dat het om UTF-16 gaat). Om dit te controleren, open het betreffende XML-bestand met een teksteditor die ook ondersteuning biedt om in verschillende encodings op te slaan (i.e. niet notepad), of open je document in een hex-editor en verifieer dat elk karakter uit 2 bytes bestaat (en niet 1).quote:Op maandag 22 juni 2009 11:05 schreef Intrepidity het volgende:
Iemand ervaring met UTF-16 in combinatie met SimpleXML/DOM? Ik wil een XML-bestand openen in SimpleXML of DOM, maar krijg de volgende error: SimpleXMLElement::__construct() [simplexmlelement.--construct]: Entity: line 1: parser error : Start tag expected, '<' not found
Dit teken staat er wel degelijk, en er staat geen witregel of spatie voor. Zodra ik de inhoud van dit bestand in een string stop in PHP en de string probeer te laden gaat het wel goed..
BOM?quote:Op maandag 22 juni 2009 11:05 schreef Intrepidity het volgende:
Iemand ervaring met UTF-16 in combinatie met SimpleXML/DOM? Ik wil een XML-bestand openen in SimpleXML of DOM, maar krijg de volgende error: SimpleXMLElement::__construct() [simplexmlelement.--construct]: Entity: line 1: parser error : Start tag expected, '<' not found
Dit teken staat er wel degelijk, en er staat geen witregel of spatie voor. Zodra ik de inhoud van dit bestand in een string stop in PHP en de string probeer te laden gaat het wel goed..
Betreffende eerste regel:
[ code verwijderd ]
1 2 3 4 5 6 | 1 1 10 s 2 1 10 m 3 1 10 l 4 1 12567431 l 5 1 10678096 m |
1 2 3 | <tr><td>Kleur:</td><td>12567431</td><td>maat</td>l</td></tr> <tr><td>Kleur:</td><td>10678096</td><td>maat</td>m</td></tr> |
apart tabelletje voor maten, en die linken aan het id?quote:Op maandag 22 juni 2009 23:10 schreef Swetsenegger het volgende:
Ik heb mezelf weer in een lastige mysql hoek gemanoeuvreerd....
[ code verwijderd ]
Nu moet ik als de artID en kleur gelijk is dit behandelen als 1 product in verschillende maten. Dus bovenstaand moet als volgt geparsed worden
[ code verwijderd ]
Hoe ga ik dit het handigst aanpakken. Ik zat er zelf aan te denken om in de while lus te controleren of de kleur gelijk is aan het vorige rondje, maar.... hoe pas ik dan de cel 'maat' aan in de regel ervoor....
Iemand een briljant idee?
Dat lijkt me idd de beste optiequote:Op maandag 22 juni 2009 23:13 schreef GlowMouse het volgende:
Niet je output eruit gooien middenin je code. Eerst een arraytje opbouwen $data[$artid][$kleur][] = $row.
Als je het in een andere tabel zet zoals jij voorstelt, dan zul je alsnog wat met mijn post moeten doen.quote:Op maandag 22 juni 2009 23:55 schreef PiRANiA het volgende:
[..]
Ondanks alle redundante data die op deze manier blijft bestaan?
Het is nu al in 3 tabellen opgebroken ivm de schaalbaarheid. Hoofdeigenschappen (die voor elke kleur en maat gelden) dan de eigenschappen zoals kleur, maat, etc. en een tabel foto's.quote:Op maandag 22 juni 2009 23:12 schreef PiRANiA het volgende:
[..]
apart tabelletje voor maten, en die linken aan het id?
Hmz, help me even op weg, hoe krijg ik in mijn while lus de info bij gelijke kleur in desbetreffende array entry erbij geschoven? Als ik als key gewoon de kleur pak kan ik natuurlijk de value manipuleren.... toch?quote:Op maandag 22 juni 2009 23:13 schreef GlowMouse het volgende:
Niet je output eruit gooien middenin je code. Eerst een arraytje opbouwen $data[$artid][$kleur][] = $row.
proberen en falenquote:Op dinsdag 23 juni 2009 08:23 schreef Swetsenegger het volgende:
[..]
Het is nu al in 3 tabellen opgebroken ivm de schaalbaarheid. Hoofdeigenschappen (die voor elke kleur en maat gelden) dan de eigenschappen zoals kleur, maat, etc. en een tabel foto's.
[..]
Hmz, help me even op weg, hoe krijg ik in mijn while lus de info bij gelijke kleur in desbetreffende array entry erbij geschoven? Als ik als key gewoon de kleur pak kan ik natuurlijk de value manipuleren.... toch?
dus als hij het uitvoert lockt hij de tabel?quote:
Je wil toch de insert_id gebruiken van table 1 om in table 2 te gebruiken of begrijp ik je nu verkeerd?quote:Op dinsdag 23 juni 2009 09:16 schreef cablegunmaster het volgende:
[..]
dus als hij het uitvoert lockt hij de tabel?
kan ik geen row lock doen?en voor 1x de variabele ophalen en dan in de foreach het eruithalen en daar een variabele gebruiken ?
![]()
Ja ik begrijp hoe een lusje werkt. Het ging me om de array manipulatiequote:Op dinsdag 23 juni 2009 09:15 schreef cablegunmaster het volgende:
[..]
proberen en falenals het in de database staat kun je een variabele where kleur = ' ".$kleur" ' doen en dat foreach $array as $id en daarna het weer outputten
jup. dat wil ik doenquote:Op dinsdag 23 juni 2009 09:18 schreef Swetsenegger het volgende:
[..]
Je wil toch de insert_id gebruiken van table 1 om in table 2 te gebruiken of begrijp ik je nu verkeerd?
Hij locked de table tot jij hem unlocked.quote:Op dinsdag 23 juni 2009 09:26 schreef cablegunmaster het volgende:
[..]
jup. dat wil ik doenvoor die 0.00005 sec lockt hij de tabel?
![]()
Dat heb ik net uitgelegd. Je selecteert alle coordinaten in een vierkant, niet in een cirkel. Daarnaast lopen de meridianen niet parellel. Daarom kun je beter nafilteren door naderhand nauwkeuriger de exacte afstanden uit te rekenen zodat daadwerkelijk alles binnen een straal krijgt.quote:Op maandag 22 juni 2009 16:58 schreef Likkende_Lassie het volgende:
Maar ik selecteer helemaal geen postcodes, maar coordinaten.
Toch werkt het zo goed hoor, waarom zou het niet moeten werken?
Je bewijst hier vooral mee hoe brak PHP is. Een fatsoenlijke VM zou die loop uberhaupt niet 10000 keer uitvoeren. Check dit:quote:Op maandag 22 juni 2009 18:18 schreef Intrepidity het volgende:
En toch scheelt het 20-25%:
[ code verwijderd ]
Resultaat:
[ code verwijderd ]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | { LoopTest test; test = new LoopTest(); test.test1(); test.test2(); test.test1(); test.test2(); test.test1(); test.test2(); test.test1(); test.test2(); } public void test1() { long ms = System.currentTimeMillis(); for(int i = 0;i < 1000000000;i++) { double pi = Math.PI; } ms = System.currentTimeMillis() - ms; System.out.println("Test 1 took " + ms + "ms."); } public void test2() { long ms = System.currentTimeMillis(); for(int i = 0;i < 1000000000;i++) { doStuff(); } ms = System.currentTimeMillis() - ms; System.out.println("Test 2 took " + ms + "ms."); } private void doStuff() { double pi = Math.PI; } } |
Klopt, en omdat PHP geen perfecte taal is heeft het wel degelijk zin om constanten in plaats van functieaanroepen te gebruiken, dat was m'n punt..quote:Op dinsdag 23 juni 2009 10:47 schreef Catbert het volgende:
Je bewijst hier vooral mee hoe brak PHP is. Een fatsoenlijke VM zou die loop uberhaupt niet 10000 keer uitvoeren. Check dit:
[ code verwijderd ]
Forum Opties | |
---|---|
Forumhop: | |
Hop naar: |