[PHP] variable variabele naam, elementen samenvoegen.

Pagina: 1
Acties:
  • 551 views

Acties:
  • 0 Henk 'm!

  • Ehv_BramBo
  • Registratie: November 2000
  • Laatst online: 16-08 00:21
Hoe kan ik m.b.v. een "for loop" een variabele variabele samenstellen? Ik bedoel een loopje dat bijvoorbeeld genereert:

$test_1="test";
$test_2="test";
$test_3="test";
$test_4="test";
$test_5="test";
$test_6="test";
$test_7="test";
$test_8="test";
$test_9="test";
$test_10="test";

Ik zoek iets als het onderstaande, maar dan werkend. "$test_.$counter" is niet de juiste manier om de twee elementen samen te voegen. Maar wat werkt dan wel? Ik heb wat zitten klooien met backslashes e.d., maar zonder succes.

for ( $counter=1; $counter<=10; $counter=$counter+1) {
$test_.$counter="test";
}

Acties:
  • 0 Henk 'm!

  • disjfa
  • Registratie: April 2001
  • Laatst online: 03-07 14:47

disjfa

be

Gebruik een array?

disjfa - disj·fa (meneer)
disjfa.nl


Acties:
  • 0 Henk 'm!

  • BarthezZ
  • Registratie: Juli 2004
  • Niet online

BarthezZ

anti voetbal en slechte djs!

Eigenlijk gaat het niet in PHP, een goede manier hoe dat te doen is met arrays:
PHP:
1
2
3
4
for($i =1; $i <= 10; $i++)
{
  $test[$i] = 'test';
}


Of met $GLOBALS (smerig en volgens mij echt niet de bedoelings:
$GLOBALS['test_'.$i] = "test';

Acties:
  • 0 Henk 'm!

  • GlowMouse
  • Registratie: November 2002
  • Niet online
Dat dus, en anders is er een dubbel dollarteken in PHP waarvan je de betekenis op moet zoeken.

Acties:
  • 0 Henk 'm!

Verwijderd

Gaat prachtig in PHP:

code:
1
2
3
4
5
6
7
$tekst1 = "a";
$tekst2 = "b";
$tekst3 = "c";

for($i = 1; $i<= 3;$i++){
echo ${"tekst".$i};
}

Acties:
  • 0 Henk 'm!

  • Fuzzillogic
  • Registratie: November 2001
  • Laatst online: 01-07 22:34
${"test_$counter"}

Of het prachtig is mag je zelf bepalen. Ik vind het te ranzig voor woorden dat een taal dit soort syntax ondersteunt. Het sloopt de mogelijkheid tot ondersteuning van de programmeur door een IDE.

[ Voor 84% gewijzigd door Fuzzillogic op 28-12-2009 01:39 ]


Acties:
  • 0 Henk 'm!

  • marco_balk
  • Registratie: April 2001
  • Laatst online: 20-06 21:52
Wanneer je PHP5 gebruikt, kun je ook kiezen de StdClass (http://www.krisjordan.com...ies-in-php-with-stdclass/). Je kan dynamisch properties toewijzen aan deze Class:
PHP:
1
2
3
4
5
$object = new StdClass;
for( $counter=1; $counter<=10; $counter++)
{
    $object->$counter = "test{$counter}";
}

Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Een array, of inderdaad een ander passende datastructuur is het enige goede antwoord. Iedereen die $$ als 1e optie aandraagt moet je verder negeren.

{signature}


Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Ik denk dat het verstandig is om eerst eens een basis tutorial PHP te doen, dan had je dit hele probleem niet gehad. Gebruik een array en negeer alle andere mogelijkheden die wel werken maar niks oplossen.

Acties:
  • 0 Henk 'm!

Verwijderd

Om dan maar even een antwoord op je vraag te geven:

PHP:
1
2
3
4
5
6
for($i=1;$i<11;$i++){       
        $varname  = "test_".$i;
        $$varname = "test";             
    }
    
    echo $test_7; // print dus test

Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Best dapper om daar nog mee te komen gezien de 2 reacties boven je. :X |:(

Het is het antwoord op de vraag, maar de vraag was gewoon verkeerd.

{signature}


Acties:
  • 0 Henk 'm!

  • Barleone
  • Registratie: Maart 2009
  • Laatst online: 06:44
Verwijderd schreef op maandag 28 december 2009 @ 11:04:
Om dan maar even een antwoord op je vraag te geven:

PHP:
1
2
3
4
5
for($i=1;$i<11;$i++){       
    $varname  = "test_".$i;
    $$varname = "test";             
}
echo $test_7; // print dus test
Dit is een hele slechte oplossing en lost niets op, zoals hierboven al wordt gezegt, met die dubbele $$.
Met arrays is dit zoveel makkelijker:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$lijstje = array(); //array maken.
for($i=0; $i<10; $i++) {
    $lijstje[$i] = 'test'; // $lijstje wordt gevuld met 10 tekstjes met: 'test'
}

// Nu leuk even het lijstje langslopen om het weer te printen.
foreach($lijstje as $test_tekstje){
    echo $test_tekstje; //print alle items uit de array;
}

// Om een beetje inzicht te geven in hoe een array in elkaar zit, printen we even de array in al zijn eenvoud:
echo '<pre>';
var_dump($lijstje);
echo '</pre>';

Veel plezier met arrays!

[ Voor 2% gewijzigd door Barleone op 28-12-2009 11:29 . Reden: het forum renderde dit bericht niet OK. ]

Tweakers.net 6 nostalgie! - Wayback Machine
Have you tried turning it off and on again?


Acties:
  • 0 Henk 'm!

Verwijderd

Barleone schreef op maandag 28 december 2009 @ 11:27:
[...]

Dit is een hele slechte oplossing en lost niets op, zoals hierboven al wordt gezegt, met die dubbele $$.
Met arrays is dit zoveel makkelijker:
Klopt helemaal, maar die optie is het hierboven al een paar keer voorgeschoteld. Ongeacht dat het een crappy oplossing is, is het wel een antwoord op zijn vraag.

Maar @ts leer inderdaad gebruik maken van arrays

Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Verwijderd schreef op maandag 28 december 2009 @ 11:32:
[...]


Klopt helemaal, maar die optie is het hierboven al een paar keer voorgeschoteld. Ongeacht dat het een crappy oplossing is, is het wel een antwoord op zijn vraag.

Maar @ts leer inderdaad gebruik maken van arrays
Geef zo'n ontzettend dom voorbeeld dan ook gewoon niet :{ Daar heeft ie gewoon niks aan.

Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Zoals al een paar keer in het topic gezegd, gebruik gewoon array's of een andere data-structuur die voor die doel uitermate geschikt is. De manier met "Variabele Variabelen" met $$ etc.. is gewoon meestal niet de juiste manier om het op te lossen.

Echter had je dit natuurlijk ook zelf kunnen vinden in de search, want dit onderwerp is al vele malen langs gekomen, en telkens komt het op hetzelfde neer. Zoeken op: Variabele Variabele PHP

Deze gaat dus ook op slot, want buiten de al vele malen gevoerde discussie of je een dergelijke constructie nu wel of niet wilt gebruiken zal er geen nuttige discussie uit voort vloeien.

Lees A.U.B. even de oude topics door, en neem het advies wat daar ( en in dit topic ) gegeven word ter harte.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”

Pagina: 1

Dit topic is gesloten.