Avatar billede 13thsky Nybegynder
28. september 2004 - 22:00 Der er 21 kommentarer og
1 løsning

simplet array

kort spørgsmål:

Hvor virker det her simple script ikke?


$name[0]="blackrussian";
$name[1]="whiterussian";
$name[2]="screwdriver";
$name[3]="tequilasunrise";

for($i=0; $i<=3; $i++)
{
echo $name[$i];
}
Avatar billede bromer Nybegynder
28. september 2004 - 22:07 #1
Det gør det også når jeg kører det
Avatar billede jakoba Nybegynder
28. september 2004 - 22:08 #2
Jeg kan ikke se nogen umiddelbar grund.

har du checket om ordet 'name' er et reserveret ord der allered har en betydning i php ?

har du husket at starte din script sektion med  <?php  og afslutte den med ?>

Hvad sker der når du prøver det script og hvordan afvikler du det ?
Avatar billede bromer Nybegynder
28. september 2004 - 22:12 #3
scriptet kører fint på min maskine.. måske er det netop som jakoba siger fordi du har glemt "<?"
Avatar billede Slettet bruger
28. september 2004 - 22:31 #4
Dut burde også virke. Til gengæld er det smartere at bruge foreach end en ren for når man vil gennemløbe et array:

foreach($name as $i => $drink){
  echo "Drink nummer $i er $drink";
}

Hvis du ikke skal bruge nummeret til noget i lækken, så kan det udelades:

foreach($name as $drink){
  echo $drink;
}
Avatar billede Slettet bruger
28. september 2004 - 22:32 #5
Jeg skulle hvis ikke have snuset til glassene. Jeg mente naturligvis 'løkken' og ikke 'lækken'.
Avatar billede 13thsky Nybegynder
28. september 2004 - 23:10 #6
ja, det var vist en klassisk fejl40... Har vist siddet her for længe..

Drop et svar jakoba...
Avatar billede Slettet bruger
28. september 2004 - 23:43 #7
Du er ikke den eneste. Jeg kan da se et par tastefejl mere i mine indlæg, som jeg ikke burde have lavet. Og bromer var også lidt underholdende tidligere idag.
Avatar billede bromer Nybegynder
28. september 2004 - 23:50 #8
ja.. fra nu af når jeg er den første der svarer så er der ikke andre der må komme ind og blande sig.. jeg bliver åbenbart meget rundtosset af det.
Avatar billede olebole Juniormester
29. september 2004 - 05:13 #9
<ole>

sandbox >> hvad mener du med: "Til gengæld er det smartere at bruge foreach end en ren for når man vil gennemløbe et array"?
Denne:

$a = array();
for ( $i=0; $i<10000; $i++ ) {
    $a[] = "En lille tekst og et tal - ".$i;
}

for ( $i=0; $i<count($a); $i++) {
    $s .= $a[$i];
}

afvikler cirka dobbelt så hurtigt som denne:

$a = array();
for ( $i=0; $i<10000; $i++ ) {
    $a[] = "En lille tekst og et tal - ".$i;
}

foreach ($a as $x => $a) {
    $s .= $a[$x];
}

Så umiddelbart ville jeg påstå det modsatte ... altså, at det er _mindst_ smart at bruge foreach()  :)

/mvh
</bole>
Avatar billede bromer Nybegynder
29. september 2004 - 17:23 #10
Jeg tror at sandbox mener at det er mere læseligt. Det virker også underligt at køretiden ikke minder meget om hinanden.. så er foreach dårligt impelmenteret...
Avatar billede olebole Juniormester
29. september 2004 - 17:32 #11
Hehe ... nu må vi have et par forklaringer mere. Hvorfor er det mærkeligt, foreach er langsommere - og hvorfor skulle det betyde dårlig implementering?
På mig virkede det helt urealistisk, at foreach skulle være ligeså hurtig - eller hurtigere ... derfor testede jeg.
I en foreach-løkke bruges jo ikke en alm. incrementor - det underliggende API tager fat i array'et på en helt anden måde.
Avatar billede bromer Nybegynder
29. september 2004 - 17:59 #12
Jeg skal ikke kunne udtale mig om hvordan API'et tager hånd om et array på. Det er heller ikke mærkeligt at foreach er langsommere.. jeg synes bare en faktor 2 er rigtig meget. Der er for det første ikke forskel på hvordan $a bliver opbygget i de to eksempler, hvilket tyder på at foreach er mere end er faktor 2 langsommere.

Det undrer mig at API'et ikke laver nogle undersøgelser omkring array'et opbygning og derefter vælger den hurtigste måde at udføre foreach på.
Avatar billede olebole Juniormester
29. september 2004 - 18:20 #13
Ja, sådan kan man jo så undre sig over, der er så stor forskel på, hvad der får folk til at undre sig. Jeg undrede mig faktisk over, forskellen trods alt ikke var større  *LoooL*

Nej, forskellen er cirka en faktor 2. Jeg har ikke snakket om 'mere end to'. Når jeg fortæller dig, at forskellen på en for- og en foreach-løkke er en faktor 2, har jeg naturligvis ikke talt andet end afviklingen af løkkerne med  ;o)
Avatar billede bromer Nybegynder
29. september 2004 - 18:45 #14
Okay.. men det var jo oplagt at tro at du havde :) Men jeg synes stadig ikke at køretiden burde afvige med mere end en konstant faktor, hvilken jo så ville blive uden betydning når ens array var stort nok.

Du nævnte at API behandlede arryet meget forskelligt. Har du det fra kildekoden eller er det beskrevet et sted i manualen?
Avatar billede Slettet bruger
29. september 2004 - 23:02 #15
Det har nok noget at gøre med, at når man bruger foreach bliver arrayindholdet hele tiden kopieret over i de andre variable. Det er også derfor, man ikke kan ændre i et array på denne måde:

foreach($array as $value){
  $value++;
}

Så kan man jo gå igang med at diskutere forskellige typer performance: Er det vigtigst, at applikationen er effektiv, eller er det vigtigere, at programmøren er? Og ved hvilken grad af programkompleksitet skal man droppe at optimere programmet, for at det stadig er til at gennemskue, hvad der foregår? (Nej, så kompleks er en for-løkke heller ikke, det er mere princippet.)

Forresten skulle den passende løkke nummer 2.2 i oleboles eksempel nok have set således ud:

foreach ($a as $x) {
    $s .= $x;
}
Avatar billede olebole Juniormester
13. oktober 2004 - 15:16 #16
sandbox >> Det er præcis, hvad der får det til at se logisk ud, at en foreach er langsommere.

Jeg er helt enig i dine principielle betragtninger om overskuelighed og performance - men når koden er så enkel som her, vil jeg afgjort mene, der bør optimeres for hastighed  ;o)

Ja, du har helt ret i, at jeg faktisk testede forkert ... gav foreach et 'unfair handicap'. Naturligvis burde min foreach-løkke have udført præcis samme stykke arbejde.
My bad ... selvom det nu ikke piller nævneværdigt ved hastigheden  :)
/mvh
Avatar billede Slettet bruger
13. oktober 2004 - 15:32 #17
Grunden til at jeg i så høj grad foretrækker foreach til at gennemløbe arrays er nok, at jeg meget ofte bruger arrays med tekstbaserede indekser - og der kan en almindelig for-løkke ikke bruges til meget.
Avatar billede 13thsky Nybegynder
18. november 2004 - 23:15 #18
hva så jacoba, skal du ha 15p til noget snol?

Drop et svar... (c:

/13
Avatar billede 13thsky Nybegynder
28. februar 2005 - 00:36 #19
smider du et svar jacoba?

/13
Avatar billede 13thsky Nybegynder
25. maj 2005 - 00:37 #20
sidste chance jacoba... Så vi kan få den lukket

/13
Avatar billede jakoba Nybegynder
25. maj 2005 - 04:44 #21
Det var ellers udholdenhed. takker :-))
beklager så sen respons.
Avatar billede 13thsky Nybegynder
25. maj 2005 - 08:09 #22
hehe, np

TAkker herfra

/13
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester