[PHP] Variabelen in variabelen met extra karakters

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Peedy
  • Registratie: Februari 2002
  • Laatst online: 06-11-2024
Hey,
Ik zit met een probleeme met variabelen in variabelen.
Vanaf de eerste pagina stuur ik de variabelen $1 - $10 (omschrijving) en de variabelen $prijs1 - $prijs10 (..prijs) door naar de tweede pagina. Nu gebruik ik in de tweede pagina een for loop zoals dit;
PHP:
1
2
3
for ($i = 1; $i <= 10; $i++) {
echo ${$i};
}

En dat werkt perfect. Ik heb echter ook $prijs1 - $prijs10, en dat probeer ik zo als output te krijgen:
PHP:
1
2
3
for ($i = 1; $i <= 10; $i++) {
echo $prijs{$i};
}

Maar dat werkt dus niet! Ook ${$i}prijs en ${prijs$i} werken niet :(
Heeft iemand hier een oplossing voor of moet ik hier een hele andere (omslachtigere) aanpak voor bedenken?

[ Voor 6% gewijzigd door Peedy op 06-06-2005 16:47 ]


Acties:
  • 0 Henk 'm!

  • Blorgg
  • Registratie: Juni 2001
  • Niet online
Wat jij moet doen is eens kijken hoe arrays werken. Deze zijn precies bedoeld om te doen wat jij hier wilt :)

Kijk ook even goed naar "Recursive and multi-dimensional arrays" op die pagina.

Acties:
  • 0 Henk 'm!

Verwijderd

Je zou een Array kunnen gebruiken, of gewoon de code voluit noteren zonder "for" lus.

code:
1
2
3
4
5
6
7
echo $prijs1;
echo $prijs2;
echo $prijs3;
echo $prijs4;
echo $prijs5;
echo $prijs6;
etc.

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Toch verwonderlijk dat php accepteerd dat je uberhaupt variabele namen kunt krijgen die beginnen met een cijfer. Zou niet mogen volgens hun eigen definities.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Peedy
  • Registratie: Februari 2002
  • Laatst online: 06-11-2024
Arrays komt in dit geval niet goed uit, aangezien die krengen altijd bij 0 beginnen (en nog een paar redenen die te lang duren om uit te leggen, maar het script is uitgebreider dan dit, dus neem maar gewoon aan dat dit geen optie is).
Alles uittikken is ook geen optie, aangezien ik het voor een klant ontwikkel en geen flauw idee heb hoeveel producten hij gaat toevoegen (misschien wel >1000..)

[ Voor 25% gewijzigd door Peedy op 06-06-2005 16:58 ]


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03:42

.oisyn

Moderator Devschuur®

Demotivational Speaker

pEeDy16 schreef op maandag 06 juni 2005 @ 16:47:
Heeft iemand hier een oplossing voor of moet ik hier een hele andere (omslachtigere) aanpak voor bedenken?
Je moet even goed nadenken wat er precies gebeurt :)
Als je $$bla doet, dan krijg je dus de variabele waarvan de naam gelijk is aan de inhoud van $bla. Oftewel, als $bla de string "hallo" is, dan refereert $$bla naar de variabele $hallo.

Nu wil jij "prijs" + een nummertje. Denk nou eens goed na wat er nu gedaan moet worden. Hint: probeer de volledige naam van de variabele als string in een variabele te stoppen.

Daarnaast is arrays gebruiken natuurlijk simpelweg "net", terwijl wat je nu doet "vies" is :)

[ Voor 8% gewijzigd door .oisyn op 06-06-2005 16:59 ]

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!

  • ramonp
  • Registratie: Januari 2001
  • Laatst online: 19-09 10:35
pEeDy16 schreef op maandag 06 juni 2005 @ 16:56:
Arrays komt in dit geval niet goed uit, aangezien die krengen altijd bij 0 beginnen (en nog een paar redenen die te lang duren om uit te leggen, maar het script is uitgebreider dan dit, dus neem maar gewoon aan dat dit geen optie is).
Alles uittikken is ook geen optie, aangezien ik het voor een klant ontwikkel en geen flauw idee heb hoeveel producten hij gaat toevoegen (misschien wel >1000..)
Dan sla je de waarde 0 toch over of je kiest waarde + 1, dan ben je er ook.

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Wat heeft het met nul beginnen eigenlijk te maken met het wel of niet kunnen gebruiken van arrays?

Sowieso kun je in php arrays ook als map gebruiken (ie willekeurige keys gebruiken ipv een oplopende index).

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03:42

.oisyn

Moderator Devschuur®

Demotivational Speaker

pEeDy16 schreef op maandag 06 juni 2005 @ 16:56:
Arrays komt in dit geval niet goed uit, aangezien die krengen altijd bij 0 beginnen (en nog een paar redenen die te lang duren om uit te leggen, maar het script is uitgebreider dan dit, dus neem maar gewoon aan dat dit geen optie is).
Ben ik toch wel benieuwd naar die argumenten eigenlijk :)

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

Modbreak:anders ga je de hints die gegeven zijn niet constructief teniet doen ;)

[ Voor 93% gewijzigd door .oisyn op 06-06-2005 17:03 ]


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03:42

.oisyn

Moderator Devschuur®

Demotivational Speaker

Janoz schreef op maandag 06 juni 2005 @ 16:56:
Toch verwonderlijk dat php accepteerd dat je uberhaupt variabele namen kunt krijgen die beginnen met een cijfer. Zou niet mogen volgens hun eigen definities.
Variabelen zijn slechts entries in de global hashtable. Aangezien "12aap" een prima array key is, is een variabele met diezelfde naam volledig legaal. Het punt zit 'm alleen in het feit dat $12aap niet legaal is ;)

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!

  • Helox-in-a-box
  • Registratie: Augustus 2000
  • Laatst online: 10:07
dit werkt wel:
Modbreak:zoals ik al zei


maar je kan idd beter met een array werken, kan je makkelijker operaties op los gooien (sorteren o.a).

[ Voor 30% gewijzigd door .oisyn op 06-06-2005 17:09 ]


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Dat bedoel ik ook. Het volgende is toch vreemd:
PHP:
1
2
$1 = "foo"; //illegaal
${'1'} = "foo";//legaal


Duidelijk weer een voorbeeldje phpOnvolkomenheden++

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Peedy
  • Registratie: Februari 2002
  • Laatst online: 06-11-2024
.oisyn schreef op maandag 06 juni 2005 @ 16:58:
[...]


Je moet even goed nadenken wat er precies gebeurt :)
Als je $$bla doet, dan krijg je dus de variabele waarvan de naam gelijk is aan de inhoud van $bla. Oftewel, als $bla de string "hallo" is, dan refereert $$bla naar de variabele $hallo.

Nu wil jij "prijs" + een nummertje. Denk nou eens goed na wat er nu gedaan moet worden. Hint: probeer de volledige naam van de variabele als string in een variabele te stoppen.

Daarnaast is arrays gebruiken natuurlijk simpelweg "net", terwijl wat je nu doet "vies" is :)
_/-\o_ _/-\o_
Ik heb het zo opgelost:
PHP:
1
2
3
4
for ($i = 1; $i <= $aantal; $i++) {
$prijstussenstap = "prijs$i";
echo $$prijstussenstap;
}

:D Dankje!

Edit: inderdaad, logisch nadenken is errug handig soms :P

[ Voor 8% gewijzigd door Peedy op 06-06-2005 17:09 ]


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Dat is geen oplossing, maar een workaround van een belabberde implementatie.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Peedy
  • Registratie: Februari 2002
  • Laatst online: 06-11-2024
Het werkt, en arrays waren echt geen optie hier. Toch niemand die de source ziet als 't op internet staat :7

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03:42

.oisyn

Moderator Devschuur®

Demotivational Speaker

.oisyn schreef op maandag 06 juni 2005 @ 17:00:
Ben ik toch wel benieuwd naar die argumenten eigenlijk :)
^^^^^^

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!

  • Blorgg
  • Registratie: Juni 2001
  • Niet online
Totdat je ooit eens een applicatie gaat maken die anderen wel inzien, en je er dan achter komt dat je jezelf slechte gewoontes hebt aangeleerd. Vervolgens willen de andere mensen niets meer met jouw werk te maken hebben en wordt je hard uitgelachen ;)

Nee serieus, wen jezelf gewoon aan om nette code te schrijven. Dat je nu kennelijk nog niet helemaal begrijpt hoe arrays werken en wat je er allemaal mee kan doen, is juist een goede reden om het nu gelijk goed te leren. Zeker als je dan later nog eens dingen aan gaat passen maak je het jezelf er een stuk makkelijker mee. Van ranzige constructies krijg je vroeg of laat toch echt spijt :)

Ow, en de mensen die hier meehelpen met het verspreiden van ranzige manieren zijn natuurlijk ook lekker aan het prutsen. Eerlijk waar, zo wordt de jeugd nou grondig verpest :P

[ Voor 14% gewijzigd door Blorgg op 06-06-2005 17:21 ]


Acties:
  • 0 Henk 'm!

Verwijderd

het gaat er denk ik niet zozeer om of een ander je code gaat zien, maar ook meer om performance redenen dat je netjes moet programmeren.

Acties:
  • 0 Henk 'm!

  • Peedy
  • Registratie: Februari 2002
  • Laatst online: 06-11-2024
.oisyn schreef op maandag 06 juni 2005 @ 17:00:
[...]


Ben ik toch wel benieuwd naar die argumenten eigenlijk :)
Okay.
Argument 1; de omschrijving en artikelnummer moeten dus aan de prijs gekoppeld worden. Als ik de prijs met arrays ga werken, loopt de prijs dus één cijfer achter (ivm arrays die bij 0 beginnen).
Euhm, shit..dit was het eigenlijk wel. Okay jullie hebben me overtuigd, ik ga arrays proberen. Als dat niet lukt, heb ik altijd nog deze (brakke) code.
Nu moet ik echter wel de omschrijving en artikelnummer ook in arrays zetten bedenk ik me net..hmm.....

Edit; vooral het argument over in teams werken en uitgelachen worden haalde me over O+

[ Voor 7% gewijzigd door Peedy op 06-06-2005 17:32 ]


Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
pEeDy16 schreef op maandag 06 juni 2005 @ 17:11:
Het werkt, en arrays waren echt geen optie hier. Toch niemand die de source ziet als 't op internet staat :7
Ik durf er vrij veel op de wedden dat arrays echt wel een mogelijkheid waren. En die laatste opmerking is ook wel heel erg fout. Je moet je gewoon houden aan goede coding practices en jezelf geen smerige truukjes aanleren. Leg het volledige probleem eens aan ons voor en daag ons uit om het netjes op te lossen, daar kun je alleen maar van leren.

Noushka's Magnificent Dream | Unity


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03:42

.oisyn

Moderator Devschuur®

Demotivational Speaker

Blorgg schreef op maandag 06 juni 2005 @ 17:19:
Ow, en de mensen die hier meehelpen met het verspreiden van ranzige manieren zijn natuurlijk ook lekker aan het prutsen. Eerlijk waar, zo wordt de jeugd nou grondig verpest :P
Of zo voorkom je concurrentie, door anderen slechter voor de dag te laten komen ;)
pEeDy16 schreef op maandag 06 juni 2005 @ 17:31:
Argument 1; de omschrijving en artikelnummer moeten dus aan de prijs gekoppeld worden. Als ik de prijs met arrays ga werken, loopt de prijs dus één cijfer achter (ivm arrays die bij 0 beginnen).
Het leuke is dat arrays in php helemaal geen arrays zijn, niets verplicht je tot het beginnen bij 0, je mag ook best beginnen met 12347, of slechts de indices 1, 4, 324 en "poep" gebruiken :)

[ Voor 41% gewijzigd door .oisyn op 06-06-2005 17:35 ]

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!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
pEeDy16 schreef op maandag 06 juni 2005 @ 17:31:
[...]

Okay.
Argument 1; de omschrijving en artikelnummer moeten dus aan de prijs gekoppeld worden. Als ik de prijs met arrays ga werken, loopt de prijs dus één cijfer achter (ivm arrays die bij 0 beginnen).
Euhm, shit..dit was het eigenlijk wel. Okay jullie hebben me overtuigd, ik ga arrays proberen. Als dat niet lukt, heb ik altijd nog deze (brakke) code.
Nu moet ik echter wel de omschrijving en artikelnummer ook in arrays zetten bedenk ik me net..hmm.....

Edit; vooral het argument over in teams werken en uitgelachen worden haalde me over O+
Je kunt met arrays beginnen met ieder nummer die je wilt. Je kunt zelfs een string gebruiken waardoor het een associatieve array wordt. Met foreach kun je hier gemakkelijk doorheen loopen. Ook array_values() en array_keys zijn handige functies die je eens moet bekijken.

Noushka's Magnificent Dream | Unity


Acties:
  • 0 Henk 'm!

  • Peedy
  • Registratie: Februari 2002
  • Laatst online: 06-11-2024
.oisyn schreef op maandag 06 juni 2005 @ 17:33:
[...]


Of zo voorkom je concurrentie, door anderen slechter voor de dag te laten komen ;)


[...]


Het leuke is dat arrays in php helemaal geen arrays zijn, niets verplicht je tot het beginnen bij 0, je mag ook best beginnen met 12347, of slechts de indices 1, 4, 324 en "poep" gebruiken :)
Maar als ik bijvoorbeeld dit intik: <input type="text" name="textarray[]">, dan moet ik op de volgende pagina de eerste waarde oproepen dmv textarray[0], of mis ik iets?

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03:42

.oisyn

Moderator Devschuur®

Demotivational Speaker

Dan wel ja, maar je kunt natuurlijk ook specifiek de indices geven. Als het gegenereerd wordt zou ik idd wel voor de textarray[] manier gaan.

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!

  • Blorgg
  • Registratie: Juni 2001
  • Niet online
pEeDy16 schreef op maandag 06 juni 2005 @ 17:51:
Maar als ik bijvoorbeeld dit intik: <input type="text" name="textarray[]">, dan moet ik op de volgende pagina de eerste waarde oproepen dmv textarray[0], of mis ik iets?
Dan mis je idd iets :) Wat je met arrays kan doen is namelijk gebruik maken van keys. Dus stel je maakt een array:
PHP:
1
2
3
4
5
6
7
8
$uberarray = Array
(
    [124] => 'naam bla 1',
    [423] => 'water is',
    [236] => 'nat en',
    [562] => 'de lucht',
    [464] => 'is blauw'
);

Dan kan je eenvoudig de naam in een url meegeven door name="' . $uberarray['423'] . '" te doen. Want $uberarray['423'] heeft dan als waarde 'naam bla 1'. Maar netter zou zijn als je een ID van een product mee geeft. Nu moet je namelijk de bijbehorende key gaan zoeken met de naam. Dat werkt wel, maar is langzamer en veel omslachtiger dan als je met een ID kan werken.

Met een ID kan je gewoon ipv name="bla", dingetjesID="3" doen. In de volgende pagina kan je dan alles ophalen uit een database where ID = 3. Anders zou je namelijk eerst alles uit je DB moeten halen, in een array zetten. Daarna de array gaan doorzoeken, en dan pas gaan doen wat je nou eigenlijk wilde doen.

[ Voor 21% gewijzigd door Blorgg op 06-06-2005 18:20 ]


Acties:
  • 0 Henk 'm!

  • T-MOB
  • Registratie: Maart 2001
  • Laatst online: 16:36
Blorgg schreef op maandag 06 juni 2005 @ 18:18:
[...]
Dan mis je idd iets :) Wat je met arrays kan doen is namelijk gebruik maken van keys. Dus stel je maakt een array:
TS miste helemaal niets, zoals het er stond was het helemaal correct. Wil je keys vastleggen in je form dan kan dat als volgt:
HTML:
1
<input type="text" name="test[3]">


Nu kun je de waarde daarvan vinden in $_POST['test'][3] :)

Regeren is vooruitschuiven

Pagina: 1