[PHP] variabele variabelen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Wat het zou moeten zijn:

$naam1=organisatie;
$naam1_1='vestigingen';
$naam1_2='afdelingen';

nu zou ik dus de variabelenaam variabel willen maken d.m.v. een teller
ik wil geen gebruik maken van andere mogelijkheden zoals arrays omdat dit gekoppeld wordt met een javascript dat ik niet kan veranderen

in mijn php-atlas _/-\o_ staat er niks over vermeld

Acties:
  • 0 Henk 'm!

  • D2k
  • Registratie: Januari 2001
  • Laatst online: 02-09 11:02

D2k

1/ niet doen, ik zie het probleem niet met een array?
2/ je weet toch wel hoe je variabelen samensteld?
ik zou dan overigens voor
$naam_ . $getal = "blaat";
kiezen, netjes in een forlus zodat getal oploopt

Doet iets met Cloud (MS/IBM)


Acties:
  • 0 Henk 'm!

Verwijderd

je kan als name een array mee geven en als id een verhogende teller.
name="myvar[]" id="1"
name="myvar[]" id="2"
met getElementById kan je dan je inputveld weer achterhalen

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 17-09 14:05

.oisyn

Moderator Devschuur®

Demotivational Speaker

D2k schreef op 17 februari 2003 @ 10:15:
$naam_ . $getal = "blaat";


werkt dat? imho is $naam_ . $getal geen l-value, dat resulteert simpelweg in een string

en ik neem niet aan dat "aap" = "noot" wel kan ofzo :D

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
zou mooi zijn als dat werkt ja

Acties:
  • 0 Henk 'm!

  • SchizoDuckie
  • Registratie: April 2001
  • Laatst online: 18-02 23:12

SchizoDuckie

Kwaak

variabele variabelen sucken, er is áltijd een andere, logischere manier om het op te lossen.

Waarom niet netjes zo:

PHP:
1
2
3
4
$array['organisatie'][] = 'vestigingen';
$array['organisatie'][] = 'afdelingen';
$array['winkel'][] = 'vestigingen';
$array['winkel'][] = 'winst en verlies';


da's toch veel netter? en kan je gewoon weer met een loopje uitlezen :)

[ Voor 15% gewijzigd door SchizoDuckie op 17-02-2003 10:25 ]

Stop uploading passwords to Github!


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
ja dat is waar, maar dan heb ik weer een extra loopje nodig om het uit te lezen, en werkt dus vertragend.

de procedure wordt gebruikt voor het opvullen van variabele die als toevoer dienen voor een javascript

topic kan gesloten worden

variabele variabelen werken !!

$teller1_.$teller2='het werkt';

Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

D2ks:
1/ niet doen, ik zie het probleem niet met een array?
2/ je weet toch wel hoe je variabelen samensteld?
ik zou dan overigens voor
$naam_ . $getal = "blaat";
kiezen, netjes in een forlus zodat getal oploopt

Afgezien van het feit dat je gewoon normaal arrays moet gebruiken, is
code:
1
$naam_ . $getal = "blaat";

niet helemaal correct.

Wat hier namelijk gebeurt is het volgende:
code:
1
2
3
4
5
6
7
8
9
[expressie "string concatenate"]
   [deel]$naam_[/deel]
   [deel]
      [expressie "toewijzen"]
          [aan]$getal[/aan]
          [waarde]"blaat"[/waarde]
      [/expressie]
   [/deel]
[/expressie]

Uiteraard wordt de 2e eerst uitgevoerd, omdat anders het 2e "deel" van de concatenate expressie niet bekend is.

Oftewel, "blaat" wordt aan getal toegewezen, en vervolgens wordt de inhoud van $naam_ met het resultaat van die expressie (de waarde "blaat") geconcatenate (samen gevoegd), maar wordt nergens aan toegewezen.

Kortom: in deze expressie gebeurt niet veel meer dan "blaat" de variabele $getal toewijzen ;)


Als je het in arrays zou oplossen, zou ik (ongeveer) zo doen:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
$items = array (
   'name'     => 'organisatie',
   'children'  => array (
      array ( 
          'name'      => 'vestigingen',
          'children'    => array ()
      ),
      array (
          'name'      => 'afdelingen',
          'children'    => array ()
      )
   )
);

Lijkt heel ingewikkeld, maar in feite is het niet meer dan een boomstructuur zoals jij volgens mij wilt.

Vervolgens recursief uitlezen:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
function print_item ( $items ) {
    echo '<div style="margin-left:20px;">';
    foreach ( $items as $item ) {
        echo $item [ 'name' ];
        if ( count ( $item [ 'children' ] ) > 0 ) {
           print_items ( $item [ 'children' ] );
        }
    }
    echo '</div>';
}

print_items ( $items );

zoiets.

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 17-09 14:05

.oisyn

Moderator Devschuur®

Demotivational Speaker

Verwijderd schreef op 17 februari 2003 @ 10:27:
ja dat is waar, maar dan heb ik weer een extra loopje nodig om het uit te lezen, en werkt dus vertragend.


onzin, de manier waarop jij het wil getuigd gewoon van ontzettend slechte code-techniek, en het is eigenlijk enorm lomp dat php het toestaat
topic kan gesloten worden
neuh, dan kunnen anderen niet meer reageren, das niet handig :)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 17-09 14:05

.oisyn

Moderator Devschuur®

Demotivational Speaker

drm schreef op 17 February 2003 @ 10:28:
[nohtml]
[...]
[/nohtml]
Afgezien van het feit dat je gewoon normaal arrays moet gebruiken, is
code:
1
$naam_ . $getal = "blaat";

niet helemaal correct.

Wat hier namelijk gebeurt is het volgende:
code:
1
2
3
4
5
6
7
8
9
[expressie "string concatenate"]
   [deel]$naam_[/deel]
   [deel]
      [expressie "toewijzen"]
          [aan]$getal[/aan]
          [waarde]"blaat"[/waarde]
      [/expressie]
   [/deel]
[/expressie]

Uiteraard wordt de 2e eerst uitgevoerd, omdat anders het 2e "deel" van de concatenate expressie niet bekend is.

Oftewel, "blaat" wordt aan getal toegewezen, en vervolgens wordt de inhoud van $naam_ met het resultaat van die expressie (de waarde "blaat") geconcatenate (samen gevoegd), maar wordt nergens aan toegewezen.

Kortom: in deze expressie gebeurt niet veel meer dan "blaat" de variabele $getal toewijzen ;)


dat lijkt me stug, de . operator heeft een hogere precedence dan de = operator
Moet ook wel, anders zou een expressie als $a = $b . $c niet goed gaan, omdat $a = $b eerst geevalueerd wordt volgens jouw stelling ;)
$a . $b wordt dus wel als eerst uitgevoerd, maar dat is simpelweg geen l-value en dus kun je er geen assignment op doen (je assignt een string aan een andere string)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 07-10-2022
D2k: $naam_ . $getal = "blaat"; netjes in een forlus zodat getal oploopt
Ik zou het woord "netjes" in een straal van circa 10 replies rond deze constructie proberen te vermijden :+ .

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


Acties:
  • 0 Henk 'm!

  • D2k
  • Registratie: Januari 2001
  • Laatst online: 02-09 11:02

D2k

mbravenboer schreef op 17 februari 2003 @ 11:17:
[...]

Ik zou het woord "netjes" in een straal van circa 10 replies rond deze constructie proberen te vermijden :+ .

whehehhe klopt
maar de lus loopt wel netjes hoor :+

niet dat ik er ooit over zou denken het zo aan te pakken, maar goed, ut zou kunnen

Doet iets met Cloud (MS/IBM)


Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

dat lijkt me stug, de . operator heeft een hogere precedence dan de = operator
Goed punt :z

Anyhoet, gebruik arrays ;)

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

Verwijderd

Hierboven staan al genoeg redenen om het niet te doen, maar het kan wel.
PHP:
1
2
3
4
5
6
$var_naam = "variabele_var";

$$var_naam = "waarde";

echo $$var_naam; // geeft output 'waarde'
echo $variabele_var; //  geeft ook output 'waarde'


Confession time:
Ik gebruik het zelf ook ( in error_reporting( E_ALL ) mode, alle errors dus )

PHP:
1
2
3
4
5
6
7
// versimpelde code
for ( $jaar = 1; $jaar <= $aantalJaren; $jaar++ ) {
    $plotUser  = "User" . $jaar;
    $$plotUser = new $PlotType( $jaarTelUser[ $jaar ] );

    $$plotUser->SetColor( $colorUser[ $colorcount ] );
}

Ik gebruik het om meerdere plots toe te voegen aan een grafiek.
Ik had ook de plots in een array kunnen gooien, en die na dit loopje aan de grafiek kunnen toevoegen.

[ Voor 69% gewijzigd door Verwijderd op 17-02-2003 13:18 . Reden: eigen voorbeeld toegevoegd ]

Pagina: 1