Autor Zpráva
WalWerin
Profil *
potřebuju cyklem vygenerovat proměné a opravdu nevím jak, kvůli složitosti a délce méhoscriptu to ukáži takto:
$nazev = neco;
$cislo = 1;
$nazev$cislo = obsah;
echo $nazev1;
vím že to je špatně a určitě i blbost, ale nejjednodušeji jsem tím vyjádřil co potřebuji udělat tak prosím poraďte nejjednoduší možnosti co Vás napadnou (toto by sice šlo pomocí pole, ale to se mi pro ten můj cykl nehodí, určitě existuje i jiná možnost) předem díky !
jozob
Profil
WalWerin
Presne to, čo si napísal je aj riešenie :-) Možno sa to nezdá, ale je to tak. Nazýva sa to chameleon premenná a funguje to.
jozob
Profil
Ešte na upresnenie príklad:

jednoduchy priklad:
$a="b";
$b="ahoj";
echo $$a; //vypise "ahoj"

zlozitejsi priklad:
$a="b";
$b="c";
$c="d";
$d="e";
$e="ahoj";
echo $$$$$a; //vypise "ahoj"
jozob
Profil
WalWerin
Ale Tvoj kód je potrebné ešte trošku upraviť - chameleon premenna musi vyzerat tak, ze dolare su na zaciatku, v Tvojom prípade teda takto:
$nazev="neco";

$cislo=1;
$nazev2=$nazev.$cislo;
$$nazev2="obsah";
echo $neco1;
WalWerin
Profil *
no jo, tohle funguje, jenže já potřebuju mít promenou s názvem, $nazev a s číslem protoze jich muze byt víc takže mi ten cykl vygeneruje
$nazev1 = prvni;
$nazev2 = druha;
$nazev3 = treti;
$nazev4 = ctvrta;
a ne že si budu odkazovat promenou (to cislo mi bude prave generovat cykl)
$pocet = 5;
for($i=1; $i<=$pocet; $i++)
{
$nazev$i = vysledek;
}
a pak prostě dál už potřebuju volat tu proměnou jako $nazev1, $nazev2 ..... $nazev5 a to právě nevím jak :(
Meldo
Profil
takto?
for ($i = 1; $i <= $pocet; $i++ ) {

$prom = 'nazov'.$i;
$$prom = "vysledok";

}

inak nieco podobne riesim tu http://diskuse.jakpsatweb.cz/index.php?action=vthread&forum=9&topic=19 640

tak obcas kukni ci sa ti to nebude hodit.
WalWerin
Profil *
nn to co řešiš tam je trošku něco jinýho, ty mi asi nerozumíš:( prostě potřebuju spožit název proměný ze dvou proměných
$první = neco;
$druhá = ono;
$prvni$druha = tamto;
echo $necoono; // mělo by vypsat: tamto
rozumíš? :( název proměný složit z jiné proměné
Meldo
Profil
tak snad takto. inak neviem co myslis.

$prvni = neco; 

$druha = ono;
$neco = $prvni.$druha;
echo $neco;


vypise necoono.
Meldo
Profil
alebo takto?

$prvni = neco; 

$druha = ono;
$necoono = $$prvni.$$druha;
echo $necoono;
WalWerin
Profil *
já nechci dát do obsahu víc proměnecjch, to umim, ale potřebuju dát víc proměných do názvu. Prostě aby obsah jedný proměný byl ještě s něčim jinym název jiný proměný
$jedna = 1;
teď potřebuju vytvořit proměnou která bude mít název "promena1" a tu jedničku nechci napsat ale pouzit k tomu promenou $jedna. Takže logicky bych napsal
$promena$jedna = neco;
ale to nefunguje, hodí to error
Meldo
Profil
a ked das medzi $promena a $jedna bodku "."?
tj. $promena.$jedna
WalWerin
Profil *

$cislo = 1;
$nazev.$cislo = "neco";
echo $nazev.1;

a poté:
Parse error: parse error, unexpected T_DNUMBER, expecting ',' or ';' in C:\srv\Apache2\Apache2\htdocs\index.php on line 41
WalWerin
Profil *
ale když dám


$cislo = 1;
$nazev.$cislo = "neco";
echo $nazev.$cislo;

tak to jde, jenže takhle mi to je k ničemu protože pokud by se ten cykl vygeneroval vícekrát (což bude většina případů) tak by se mi ta původní přepsala a nemusel by tam bejt ten cykl
jozob
Profil
for($i=1; $i<=10; $i++)

{
$nazev="neco".$i;
$$nazev="obsah";
}


Toto vytvorí desať premenných - neco1 až neco10 a vloží do nich text obsah.
printf
Profil
toto by sice šlo pomocí pole, ale to se mi pro ten můj cykl nehodí, určitě existuje i jiná možnost
šlo by upřesnit proč se nehodí pole? třeba by to i pro parser bylo příjemnější a tím by skript byl rychlejší
jozob
Profil
Ako hovorí printf, sprav to poľom... To moje riešenie hore je tiež určite funkčné, ale načo sa trápiť:
for($i=1; $i<=10; $i++)

{
$nazev[$i]="obsah";
}

A hotovo...
WalWerin
Profil *
Moc díky, ani nevíš jak si mi pomohl !!!
ale trvalo mi než se mi podařilo vysvětlit co potřebuji co ? :-)
jozob
Profil
WalWerin
Ja som hneď vedel, čo chceš, ale chcel som Ti vysvetliť tie chameleon premenné :-) Síce riešenie bolo jednoduché a pre parser prijatelnešie, ale chameleon je krása nie? :-)
Je to podobné ako s rekurziou. Vo veľa prípadoch sa dá rekurzia naradiť cyklom (hlavne chvostová), ktorý je menej náročnejší, ale rekurzia je krásna :-)
printf
Profil
Rekurze a chameleoni jsou rozhodně zajímavé, ale podle mne jim krásu dodá právě vhodné použití, řešící nějaký komplikovaný úkol, který by třeba ani jinak řešit nešel. V jiném případě to spíš svědčí o nerozumném programátorovi nebo touze udělat kód nesrozumitelným :-)
jozob
Profil
printf
Tak tak... Ako hovoríš. Rekurzia a chameleóni sú proste programátorské lahôdky. :-)

OT:
A najkrajšia rekurzia v C:
int main()

{
main();
return(0);
}


:-D
WalWerin
Profil *
:-) hele ja jsem začátečník chlapy. php se učím maximálně čtvrt roku. a založte si jiný tema na tyhle vaše profesionality, jinak vážně díky.
mila
Profil

$prvni = 'foo';
$druha = 'bar';
${$prvni . $druha} = ':)';
echo $foobar; // vypíše smajlíka

Ale je to pěkná blbost.
WertriK
Profil *
Ted jsem resil stejny problem, jen jsem to nemohl udelat pomoci pole ale muselo to byt ${$neco}; problem nastal s zapisem do $_POST
Zkousel jsem $_POST[${$neco}]; i $_POST["${$neco}"], ale bez uspechu. Nakonec jsem to vyresil tak ze jsem si pole $_POST extractnul a bylo.
Ale zajimalo by me jak by jste to udelali vy tak aby tam bylo $_POST ....
jozob
Profil
WertriK
Tak s poľom sa to nedá (pokiaľ viem)...
mila
Profil
Nějak nechápu, na co všichni tuhle kravinu potřebují.

Pokud jde o to pole, tak tam to snad funguje samo:
echo $_POST[ $foo ];
echo $_POST[ $foo . $bar ];
echo $_POST[ nejakaFunkce ($bar) ];
jozob
Profil
mila
My hovoríme o chameleón premennách, Tvoj uvedený príklad je úplne niečo iné. V chameleón premenných ide o to, že sa obsah jednej premennej použije ako názov premennej.
Toto téma je uzamčeno. Odpověď nelze zaslat.