Avatar billede andersjo Nybegynder
24. august 2006 - 10:38 Der er 13 kommentarer og
2 løsninger

Lage variabelnavn

Hei.

Jeg ønsker å generere et variabelnavn i en for-løkke som er avhengig av hvilken gang løkken kjører.

for ( $i=0; i<10; i++) {
  echo $variabel_1    // 1. gang
  echo $variabel_2    // 2. gang
  ...
  ...
}

Variabelen som skal skrives ut må bygges opp av $variabel_ og $i.

//andersjo
Avatar billede iss Novice
24. august 2006 - 10:41 #1
Hvad med at bruge et array så?
Avatar billede horsmark Nybegynder
24. august 2006 - 10:42 #2
Noget ala dette tror jeg men det er bestemt utestet :-)

for ( $i=0; $i<10; i++) {
  echo ${'variabel_'.$i};
}
Avatar billede horsmark Nybegynder
24. august 2006 - 10:43 #3
Avatar billede barklund Nybegynder
24. august 2006 - 10:46 #4
brug et array - jeg kan ikke gennemskue en situation, hvor ovenstående nogensinde kan være en fordel over et array.
Avatar billede horsmark Nybegynder
24. august 2006 - 10:54 #5
barklund >>
Jeg har faktiskt været ud for at skulle bruge bruge dynamiske variabler.

Case:
Der hentes et serialized array i en database, hvor nul, et eller flere config-variabler kan være sat. Eftersom det i casen var et pluginsystem der brugte den samme motor til mange plugins kunne disse vaiabler ikke navngives på forhånd.

Måden vi erklæredre variablerne på var med extract($cfgArray) og derfor havde vi brug for i et par cases at lave loops som ovenstående..

måske lidt langhåret kommentar - i så fald sorry :-)
Avatar billede andersjo Nybegynder
24. august 2006 - 10:55 #6
Det fungerte som horsmark skrev..

Kan jeg lage sessionvariabelnavn på samme måte?

$_SESSION['{'lastname_'.$i}'] = ${'lastname_'.$i};
Avatar billede skagen Nybegynder
24. august 2006 - 11:19 #7
Er det ikke dette her du vil?

for ( $i=0; $i<10; $i++) {
    eval('echo $variabel_'.$i.';');
}?>
Avatar billede horsmark Nybegynder
24. august 2006 - 11:20 #8
yes MEN metoden er _ikke_ at foretrække da koden bliver ugennemskuelig!!!

Bør kun bruges hvis det virkeligt er strengt nødvendigt!
Avatar billede skagen Nybegynder
24. august 2006 - 11:21 #9
Ups! Det var vist stort set det samme som horsmark tidlige foreslog. Sorry.
Avatar billede barklund Nybegynder
24. august 2006 - 11:30 #10
horsmark, extract() er noget nær det grimmeste i PHP - endnu grimmere end ${} :) Så at bruge en grim metode til at løse et grimt problem... :/

Du kunne jo bare have brugt $cfgArray direkte uden at extracte det. Og så kunne du have sat manglende elementer i dette i en løkke.
Avatar billede fangel Nybegynder
24. august 2006 - 11:50 #11
og for at fortsætte hvor barklund slap. "eval() er noget nær det grimmeste i PHP - endnu grimmere end extract()"

Arrays vil i 99.999% af tilfældende være at foretrække - også fordi det nok vil køre lidt hurtigere, og at det er nemmere at se hvad man arbejder med. Og man får en masse foræret til at behandle dem med - bl.a. foreach()

-fangel
Avatar billede barklund Nybegynder
24. august 2006 - 11:56 #12
Jeg synes nu at extract er værre end eval. Det kommer selvfølgelig an på, hvad man bruger eval() til, men extract har kun en funktion - og den er grim. Eval kan bruges til hvad som helst, hvoraf det meste er grimt og intet er nødvendigt. PHP er generelt et beskidt sprog :'(
Avatar billede horsmark Nybegynder
24. august 2006 - 12:25 #13
fangel>>
extract har jeg kun brugt én gang (!!!) og det er faktiskt et kraftfyldt stykke værktøj som selvfølgeligt skal bruges med ekstrem omtanke således også med ${'somename'}

Så jeg er reet sikker på vi taler samme sprog...

andersj >>
Du har fået løst dit problem... men jeg vil i den grad opfordre dig som de andre til at finde en alternativ tilgang til løsning af problematikken :-)
Avatar billede andersjo Nybegynder
24. august 2006 - 13:17 #14
Jeg bygde opp et array slik:

$personer = array();
for ($i=1; $i<=$ant; $i++) {
    $person = array();
    $person['lastname'] = ${'lastname_'.$i};
    $person['firstname'] = ${'firstname_'.$i};
    $person['organisation'] = ${'organisation_'.$i};
    $person['phone'] = ${'phone_'.$i};
    $person['email'] = ${'email_'.$i};
    $personer[] = $person;
}

Dermed kan jeg sende all informasjonen enkelt til en annen funksjon og plukke frem det jeg trenger der.

Takk for alle svar. :D
Avatar billede horsmark Nybegynder
24. august 2006 - 13:23 #15
hmm ok...
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