Kim Ludvigsen skrev:
>> foreach (tekst as $smart_remark) echo $smart_remark;
> Den der forstår jeg ikke, hvordan virker den? Skal det ikke være $tekst?
Jo til det sidste.
I PHP kan man gennemløbe et array på en speciel måde ved at bruge
foreach. Først i parentesen specificerer man hvilket array der
skal bruges, og efter "as" vælger man hvilket variabelnavn
elementerne skal kendes under. Metoden er dejligt overskuelig,
og relativt hurtig, *men* man må ikke glemme at man i så fald
arbejder med en kopi af arrayelementerne. Hvis man f.eks.
skriver:
(1) foreach ($tekst as $smart_remark) $smart_remark=strtolower($smart_remark);
så bliver man slemt skuffet når man senere bruger arrayet igen.
Der er intet ændret. Følgende generelle metode gør det samme som
før, men her vil ændringer slå igennem:
(2) for ($nr=0; $nr<(count($tekst); ++$nr) $tekst[$nr]=strtolower($tekst[$nr]);
Man kan også kombinere dem fordi foreach tillader at man også
navngiver nøglen ($nr i eksempel 2):
(3) foreach ($tekst as $nr => $smart_remark) $tekst[$nr]=strtolower($smart_remark);
=> bruges mellem nøgle og element (som ved et associativt array).
Opsamling:
(1) kan bruges hvis man kun skal aflæse værdierne.
(2) og (3) er lige gode hvis man har brug for at ændre værdierne
inde i løkken. De kan naturligvis også bruges selv om man kun
vil aflæse.
Det er en rigtig lusket fejl at glemme at foreach kun serverer en
kopi. Som begynder er det måske bedst at bruge (2) konsekvent
fordi det er den du vil kunne genkende i mange andre sprog.
>> Gå efter overskuelig kode i stedet.
> Som uøvet php'er synes jeg, den allerførste løsning fra Michael er meget
> mere overskuelig og gennemskuelig end de andre -
Nu skal jeg vise dig hvad censuren slettede i mit foregående indlæg:
========
Gå efter overskuelig kode i stedet. Løkker er overskuelige.
- [Brok]
Jo, de er!
========
Fidusen ved løkken er at dens struktur viser at det er det samme
der sker hver gang. Hvis du derimod laver tre linjer med tre
tildelinger, kan det i princippet være ret forskellige ting der
sker.
Derfor skal du vænne dig til at opfatte en løkke som en velkendt
enhed, og når du når dertil, vil den være mere overskuelig end
en udrullet stribe sætninger.
Jeg bruger løkker også ved to gennemløb. På Fidusos statistikside
har jeg f.eks. opdelt fornavnene i pige- og drengenavne. Nå der
skal laves udskrift, står der så:
foreach ($sexes as $sx => $sex) {
blablablablablabla
}
(Her er $sx nøglen, og $sex er det element jeg skal aflæse (faktisk selv et array)).
Det er overskueligt fordi løkkestrukturen fortæller at vi først
tager pigerne og derefter drengene (eller omvendt). Den
forståelse ville man ikke kunne fange i ét blik hvis løkken
var rullet ud.
Okay, nu sker der en hel del inden i den løkke, men pointen
er også gyldig også ved mindre eksempler.
--
Bertel
http://bertel.lundhansen.dk/ http://fiduso.dk/