Martin A. Skrevet 17. oktober 2007 Del Skrevet 17. oktober 2007 Burde nesten laget en egen tråd dette. En moderator kan vel klippe ut de innleggene herifra, og opprette en egen tråd for det Lenke til kommentar
MC2 Skrevet 17. oktober 2007 Del Skrevet 17. oktober 2007 (endret) <?php $array = array_fill(0,100000,null); $size = sizeof($array); for($h=0; $h < 100; $h++) { $a = $h%2; if($a == 0) { $start = microtime(true); // test for($j=0; $j < $size; $j++) {} // /test $end = microtime(true); } else { $start = microtime(true); // test foreach($array as $k => $v) {} // /test $end = microtime(true); } $time[$a][] = $end - $start; } // print $a = 0; echo "For: <pre>"; foreach($time[0] as $t) { $a += $t; echo $t."\n"; } echo "</pre>"; $b = 0; echo "Foreach: <pre>"; foreach($time[1] as $t) { $b += $t; echo $t."\n"; } echo "</pre><pre>"; $for_a = $a / count($time[0]); $foreach_a = $b / count($time[1]); echo "Server software: ".$_SERVER["SERVER_SOFTWARE"]."\n"; echo "For average : ".$for_a."\n"; echo "Foreach average: ".$foreach_a."\n"; if($for_a == $foreach_a) { echo "Exactly the same..."; } elseif($for_a > $foreach_a) { echo "Foreach was ".((($for_a - $foreach_a) / $foreach_a) * 100)."% faster than for."; } else { echo "For was <strong>".((($foreach_a - $for_a) / $for_a) * 100)."%</strong> faster than foreach."; } ?> Foreslår at vi kjører den koden i stedet. Da får vi kjørt flere tester (50 tester per istedet for 5). Gir noe sånt: For: 0.0206089019775 0.0196690559387 0.0208082199097 0.020565032959 0.0204241275787 0.0216801166534 0.0219860076904 0.0204899311066 0.0331799983978 0.0225200653076 0.0308480262756 0.0245721340179 0.021824836731 0.0205109119415 0.0208761692047 0.0210359096527 0.0272700786591 0.0260200500488 0.0219039916992 0.0226609706879 0.019868850708 0.0197019577026 0.0241899490356 0.0240092277527 0.0238950252533 0.0221538543701 0.0202350616455 0.0211548805237 0.0240669250488 0.0219919681549 0.0205490589142 0.0219650268555 0.0216310024261 0.0218460559845 0.0246610641479 0.0236058235168 0.0216069221497 0.0217430591583 0.0201051235199 0.0205309391022 0.0222289562225 0.0203700065613 0.0221610069275 0.02272605896 0.0214629173279 0.0205240249634 0.0208399295807 0.0202350616455 0.0215680599213 0.0206360816956 Foreach: 0.0257270336151 0.0275919437408 0.0262660980225 0.0268340110779 0.0283861160278 0.0267481803894 0.0259809494019 0.0278301239014 0.0281488895416 0.0276911258698 0.0284330844879 0.0347740650177 0.0284740924835 0.0290570259094 0.0269339084625 0.0284860134125 0.0384240150452 0.0312159061432 0.030375957489 0.0269978046417 0.0268430709839 0.0479168891907 0.0294368267059 0.027517080307 0.0264859199524 0.0278539657593 0.0291028022766 0.0253441333771 0.0253238677979 0.0292308330536 0.0266900062561 0.0275130271912 0.026535987854 0.0293869972229 0.0275661945343 0.0273561477661 0.0264799594879 0.0268559455872 0.0269310474396 0.0295441150665 0.0266950130463 0.0264880657196 0.0281119346619 0.0275259017944 0.0265810489655 0.0331320762634 0.027186870575 0.0272109508514 0.0274260044098 0.0270500183105 Server software: Apache/2.2.3 (Ubuntu) PHP/5.2.1 For average : 0.0222343683243 Foreach average: 0.0284339809418 For was 27.8830166303% faster than foreach. Endret 17. oktober 2007 av MC2 Lenke til kommentar
Runar0 Skrevet 17. oktober 2007 Del Skrevet 17. oktober 2007 Slenger meg med her. Server software: Apache/2.2.4 (Win32) PHP/5.2.4For average : 0.016231207847595 Foreach average: 0.017228093147278 For was 6.1417813698339% faster than foreach. Lenke til kommentar
rødøye Skrevet 17. oktober 2007 Del Skrevet 17. oktober 2007 For å være statistisk tilregnelig burde vi regne gjennomsnittet på minst 1000 kjøringer, så jeg satte grensen opp til 2500, og fikk følgende: (ikke enkeltresultater, siden det tar så stor plass). Server software: Apache/2.2.4 (Win32) DAV/2 mod_ssl/2.2.4 OpenSSL/0.9.8d mod_autoindex_color PHP/5.2.1 For average : 0.0147949551582 Foreach average: 0.0209745313644 For was 41.7681306913% faster than foreach. Lenke til kommentar
Gjest Slettet+142 Skrevet 17. oktober 2007 Del Skrevet 17. oktober 2007 Kjørte den på denne PC-en og serveren min jeg: Server software: Apache/2.2.4 (Win32) DAV/2 mod_ssl/2.2.4 OpenSSL/0.9.8e mod_autoindex_color PHP/5.2.3For average : 0.020154633522 Foreach average: 0.0243530464172 For was 20.8310058856% faster than foreach. Server software: Apache/2.2.3 (Ubuntu) PHP/5.2.1For average : 0.0143566942215 Foreach average: 0.0192275238037 For was 33.9272363614% faster than foreach. Lenke til kommentar
Peter Skrevet 17. oktober 2007 Del Skrevet 17. oktober 2007 (endret) Hjemmemaskinen min: 2500 itereringer. Server software: Apache/2.2.4 (Win32) PHP/5.2.4 For average : 0.00901700782776 Foreach average: 0.0100563365936 For was 11.5263154443% faster than foreach. Maskinen på jobben, der foreach tidligere var raskere: 250 itereringer. Server software: Apache/2.2.4 (Win32) PHP/5.2.3 For average : 0.0139458389282 Foreach average: 0.01548620224 For was 11.0453255605% faster than foreach. Macbook Server software: Apache/2.2.4 (Unix) PHP/5.2.1 DAV/2 For average : 0.0224264587402 Foreach average: 0.0310993412018 For was 38.6725455053% faster than foreach. Endret 17. oktober 2007 av Nazgul Lenke til kommentar
Martin A. Skrevet 17. oktober 2007 Del Skrevet 17. oktober 2007 Hjemmemaskin: (Foxconn HK, AMD64 X2 5600+, OCZ DDR2 1024MB) Server software: Apache/2.2.4 (Win32) DAV/2 mod_ssl/2.2.4 OpenSSL/0.9.8e mod_autoindex_color PHP/5.2.3 For average : 0.0102681779861 Foreach average: 0.0150718784332 For was 46.7824033978% faster than foreach. Laptop: (Acer Ferrari) Server software: Apache/2.2.4 (Win32) DAV/2 mod_ssl/2.2.4 OpenSSL/0.9.8e mod_autoindex_color PHP/5.2.3 For average : 0.0223005723953 Foreach average: 0.0259665060043 For was 16.4387422171% faster than foreach. Webhuset.no (Delt server) Server software: Apache/2.0.59 (Unix) DAV/2 Uptime/load: 21:40:26 up 16 days, 6:12, 0 users, load average: 1.52, 1.83, 1.88 For average : 0.00670359134674 Foreach average: 0.0104811000824 For was 56.3505222838% faster than foreach. Webhost1.no (Dedikert Intel Xeon 2.4GHz, 2GB RAM) Server software: Apache/1.3.39 (Unix) PHP/5.2.4 mod_auth_passthrough/1.8 mod_log_bytes/1.2 mod_bwlimited/1.4 FrontPage/5.0.2.2635.SR1.2 mod_ssl/2.8.30 OpenSSL/0.9.7a Uptime/load: 21:43:03 up 54 days, 2:30, 2 users, load average: 1.85, 1.81, 1.53 For average : 0.00671947002411 Foreach average: 0.0108291625977 For was 61.1609629748% faster than foreach. Ser vist ut til at min tidligere gjetting var feil. for() er helt klart raskest, selv om det er marginalt. Men mange bekker små gjør en stor å. Lenke til kommentar
Peter Skrevet 18. oktober 2007 Del Skrevet 18. oktober 2007 Det slo meg plutselig at det kanskje var en ulempe at for alltid kjørte med ett tidspunkt mindre i minnet enn foreach ved hver iterering. Derfor endret jeg if($a == 0) { til if($a == 1) { for å få foreach til å kjøre før for, og nå er resultatene helt motsatt. Ergo: Resultatene over er bogus. Vi må kjøre for og foreach i hver sin fil for å få riktige resultater. Lenke til kommentar
Ernie Skrevet 18. oktober 2007 Del Skrevet 18. oktober 2007 (endret) Det overrasker meg egentlig ikke. Plassering i koden kan gi vanvittige utslag. Selv det å inkludere filene jeg pastet inn tidligere forskjellig gir en effekt. Dvs. <?php require('for.php'); require('foreach.php'); ?> og <?php require('foreach.php'); require('for.php'); ?> gir også forskjellige resultater. Kjørt på laptopen: [Ernie@jen for_foreach]$ php for_foreach.php <pre>For: 0.18407392501831 0.19532108306885 0.18714809417725 0.18861198425293 0.18862104415894 </pre> <pre>Foreach: 0.4731810092926 0.47581219673157 0.49096083641052 0.47632193565369 0.48439502716064 </pre> [Ernie@jen for_foreach]$ php foreach_for.php <pre>Foreach: 0.23840498924255 0.25164794921875 0.26544499397278 0.24612379074097 0.25488996505737 </pre> <pre>For: 0.36389398574829 0.3875629901886 0.37805581092834 0.37649083137512 0.37795090675354 </pre> Endret 18. oktober 2007 av Ernie Lenke til kommentar
MC2 Skrevet 18. oktober 2007 Del Skrevet 18. oktober 2007 (endret) Det slo meg plutselig at det kanskje var en ulempe at for alltid kjørte med ett tidspunkt mindre i minnet enn foreach ved hver iterering. Derfor endret jeg if($a == 0) { til if($a == 1) { for å få foreach til å kjøre før for, og nå er resultatene helt motsatt. Ergo: Resultatene over er bogus. Vi må kjøre for og foreach i hver sin fil for å få riktige resultater. Interessant, men vil ikke si at de er bogus fordi. I de resultatene over så har 'for' kjørt før 'foreach' og det viser at 'for' gjennomsnittlig er 31.0439990268% raskere. Om vi nå kjører 'foreach' før 'for' og finner gjennomsnittlig hvor mye raskere 'foreach' er enn 'for', og det gjennomsnittet er lavere enn 31 så vil det vise at foreach er tregere, og vice versa. Får skrive en bedre bench'er etter middag osv. Oppgraderingen av Ubuntu går ikke som forventet, får bli en annen gang Endret 18. oktober 2007 av MC2 Lenke til kommentar
Doffar Skrevet 22. oktober 2007 Del Skrevet 22. oktober 2007 (endret) Istedenfor å lage en ny tråd om dette lille spørsmålet så spør jeg heller her. Hvilken kode har ? når man skal bruke preg_replace? Hvis noen har en side der flere slike koder står hadde det vært konge Edit: Jeg skal fjerne "/viktige_events/index.php?e=" fra en string. Endret 22. oktober 2007 av Doffar Lenke til kommentar
endrebjo Skrevet 22. oktober 2007 Del Skrevet 22. oktober 2007 Antar det funker med \? Lenke til kommentar
jeg_lyver_mye Skrevet 25. oktober 2007 Del Skrevet 25. oktober 2007 Hvorfor bruker du ikke heller bare str_replace?! Lenke til kommentar
Runar0 Skrevet 25. oktober 2007 Del Skrevet 25. oktober 2007 eventuelt substr vist teksten har fast plassering Lenke til kommentar
Rabbid Skrevet 27. oktober 2007 Del Skrevet 27. oktober 2007 Er det mulig å få en klasse til å gi tilbake forskjellige verdier ettersom hvilken funksjon den blir kjør igjennom? F.eks at "echo $MyClass;" kjører av en funksjon inne i klassen som sender ut en tekstbit. Vet at jeg kan kjøre "funksjon($MyClass->funksjon2);", men vil gjerne vite om det er mulig. Lenke til kommentar
PHPdude Skrevet 27. oktober 2007 Del Skrevet 27. oktober 2007 Er det den magiske funksjonen __toString() du ser etter? http://no2.php.net/manual/en/language.oop5.magic.php Lenke til kommentar
Rabbid Skrevet 27. oktober 2007 Del Skrevet 27. oktober 2007 Er det den magiske funksjonen __toString() du ser etter?http://no2.php.net/manual/en/language.oop5.magic.php Jepp! :-) Drev å søkte gjennom manualen i sted, men fant ingenting. Lenke til kommentar
Rabbid Skrevet 3. november 2007 Del Skrevet 3. november 2007 (endret) Var innom Canonical's Launchpad.net og syntes oversettelsesverktøyet (Rosetta) var genialt, men finner ikke noe lignende jeg kan bruke selv. Noen som vet om et slikt oversettelsesverktøy (må støtte gettext)? Endret 3. november 2007 av IQ Lenke til kommentar
L4ss3 Skrevet 16. november 2007 Del Skrevet 16. november 2007 En kjapp en her.. Hva heter det php info greiene som man pleier å ha på servere.. For å sjekke hdd plass, nettverkstrafikk, uptime osv? Kommer ikke på det :O Trodd det het phpmyinfo eller noe.. husker absolutt ikke xD Lenke til kommentar
itsmebth Skrevet 16. november 2007 Del Skrevet 16. november 2007 phpinfo(); Google er din venn Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå