Jeg har netop kørt det script, som står nedenfor, som Thomas stod for.
Det viser sig, ved store arrays, at while er cirka 45% hurtigere end foreach
Output fra script:
---------------------------------------------
Array med tallene fra 0 til 100000 er lavet
Beregner nu summen af tallene fra 0 til 100000
While: 290.532 ms
For: 327.631 ms inklusive en count for at finde længden af array'et
Foreach: 509.629 ms
---------------------------------------------
Selvom det er små størrelser vi snakker om, taler tallene vidst for sig selv.
Iøvrigt, tak for hjælpen ang. while vs for (vs foreach).
Thomas Lindgaard wrote in dk.edb.internet.webdesign.serverside.php:
> Davs
>
> > Jeg lavede engang en mindre test af
> >
> > while(list($key, $val) = each($array)) {
> > (som blev brugt i php3 til at gennemløbe en array)
> >
> > i forhold til
> >
> > foreach($array as $key => $val) {
> > (som findes i php4)
> >
> > Den sidste var betydeligt hurtigere end den første.
>
> Her vil jeg godt lige have lov til at indskyde en lille bemærkning: Ja,
> while-løkken som du har skrevet den er langsommere end foreach - men det er
> ikke while-løkkens skyld! Du kalder jo både list og each i hver iteration,
> og det er der tidsforskellen opstår.
>
> Prøv i stedet at skrive while-løkken som følger:
> $i = 0;
> $length_array = count($array);
> while ($i++ < $length_array) { noget }
>
> Jeg har klistret lidt kode ind nederst, som beregner summen af en masse tal
> vha. while, for og foreach - prøv og kør den.
>
> > >Og lige en ting til..
> > >Hvis jeg valgte at bruge en while løkke, hvilken metode er så
> > >smartest at bruge, for at gennemgå løkken indtil arrayet er
> > >gennemgået
>
> Det kommer vel an på, hvordan dit array ser ud (om det er associativt eller
> bare indekseret med tallene fra 0 til mange) - det kan altid bedst betale
> sig at bruge den nemmeste metode :)
>
> I praksis vil du aldrig komme til at mærke forskel på, om du bruger den ene
> eller anden metode - med mindre du arbejder med _meget_ store arrays.
>
>
> Hyggehejsa
> /Thomas
>
>
> Koden:
> <? // For vs. While
> // Summere tallene fra 0 til $length_array
> // (i'te indgang i array'et indeholder tallet i)
>
> $bla_array = array();
> $length_array = 100000;
> for ($i = 0; $i < $length_array; $i++)
> {
> array_push($bla_array, $i);
> }
>
> echo "Array med tallene fra 0 til ".$length_array." er lavet\n<p>Beregner
> nu summen af tallene fra 0 til ".$length_array."<p>\n";
>
> echo "<table border=\"1\" cellpadding=\"3\">\n";
>
> echo "<tr><td>While:</td> ";
> $result = 0;
> $start_time = getTimeOfDay();
> $i = 0;
> while ( $i++ < $length_array )
> {
> $result += $bla_array[$i];
> }
> $end_time = getTimeOfDay();
> echo "<td>".(($end_time['sec'] - $start_time['sec']) * 1000 +
> ($end_time['usec'] - $start_time['usec']) / 1000)." ms</td></tr>\n";
>
>
> echo "<tr><td>For:</td> ";
> $result = 0;
> $start_time = getTimeOfDay();
> $iterations = count($bla_array);
> for ($i = 0; $i < $iterations; $i++)
> {
> $result += $bla_array[$i];
> }
> $end_time = getTimeOfDay();
> echo "<td>".(($end_time['sec'] - $start_time['sec']) * 1000 +
> ($end_time['usec'] - $start_time['usec']) / 1000)." ms</td><td>inklusive en
> count for at finde længden af array'et</td></tr>\n";
>
>
> echo "<tr><td>Foreach:</td> ";
> $result = 0;
> $start_time = getTimeOfDay();
> foreach ($bla_array as $key => $value)
> {
> $result += $value;
> }
> $end_time = getTimeOfDay();
> echo "<td>".(($end_time['sec'] - $start_time['sec']) * 1000 +
> ($end_time['usec'] - $start_time['usec']) / 1000)." ms</td></tr>\n";
>
> echo "</table>";
> ?>
>
>
>
--
Vil du lære at kode HTML, XHTML, CSS, SSI eller ASP ???
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! =>
http://www.html.dk/tutorials