Autor | Zpráva | ||
---|---|---|---|
capricorn76 Profil * |
#1 · Zasláno: 3. 4. 2013, 18:53:36
Dobrý den,
pro funkci list() potřebuji z řetezce vytvořit proměnny a dosadit je to té funkce.
Když udělám níže uvedenou bláznovinu, tak to hodí fatal. $info = array('coffee', 'brown', 'caffeine'); $a = '#'; $b = '$'; $c = '#drink, #color, #power'; list(str_replace($a, $b, $c)) = $info; echo "$drink is $color and $power makes it special.\n"; |
||
Tori Profil |
#2 · Zasláno: 3. 4. 2013, 18:59:24
1. list není funkce, byť tak vypadá
2. do list se nic nedosazuje, naopak list dosazuje hodnoty z pole do zadaných proměnných. 3. z předchozích dvou vyplývá, že v list nemůžete použít žádné výrazy, volání funkcí, literály apod., jen proměnné. Odkud čtete ty řetězce "#proměnná" ?
|
||
capricorn76 Profil * |
#3 · Zasláno: 3. 4. 2013, 19:06:56
Tori:
Teď to zkouším. Budu je načítat z databáze. |
||
Joker Profil |
capricorn76:
A proč ne úplně jednoduše: echo "$info[0] is $info[1] and $info[2] makes it special.\n"; |
||
capricorn76 Profil * |
#5 · Zasláno: 3. 4. 2013, 19:25:09
Joker:
Takto jednoduše to nepůjde, protože hodnoty z polí, které budu zase ukládat pro další zpracování mají vždycky různé klíče a já se k nim tímto způsobem nedostanu. |
||
Joker Profil |
#6 · Zasláno: 3. 4. 2013, 19:28:25
capricorn76:
Tak jsou dvě možnosti: Buď dokážete identifikovat, která položka z pole se má vypsat, nebo ne. Pokud ano, půjde to udělat zhruba v tom stylu jak jsem napsal. Pokud ne, nepůjde to udělat vůbec. |
||
Tori Profil |
Spíš bych to řešila přes pole:
$hodnoty = array('coffee', 'brown', 'caffeine'); $db = '#drink, #color, #power'; preg_match_all('~(?<=\b)\w+(?=\b)~', $db, $klice); $pole = array_combine($klice[0], $hodnoty); echo "$pole[drink] is $pole[color] and $pole[power] makes it special.\n"; edit: Na rozdíl od konstrukce list ale array_combine vyžaduje, aby byl shodný počet klíčů a hodnot. Pokud to nemůžete zajistit, musela by se přidat kontrola, jestli se shoduje počet prvků v polích $klice[0] a $hodnoty, a podle toho buď zkrátit pole klíčů nebo doplnit prázdné řetězce do $hodnoty. |
||
SeparateSK Profil |
<?php class Premenne{ public $__premenne; //premenna bude neskor pouzita na prekonvertovanie $Class->... len na $... function Premenne($a,$b,$c,$d){ $this->__premenne=array(); $e=str_replace($a,$b,$c); //mena premennych $f=explode(", ",$e); //array nazvov premennych foreach($f as $i=>$v){ $this->{substr($v,1)}=$d[$i]; //vytvori novu public premennu $this->__premenne[]=substr($v,1); } } } $info = array('coffee', 'brown', 'caffeine'); $a = '#'; $b = '$'; $c = '#drink, #color, #power'; $Data=new Premenne($a,$b,$c,$info); //vytvorenie objektu Premenne foreach($Data->__premenne as $i=>$v) ${$v}=$Data->$v; //prekonvertovanie $Data->... len na $..., teda $Data->drink => $drink echo "$drink is $color and $power makes it special.\n"; ?> Potom foreach($Data->__premenne as $i=>$v) ${$v}=$Data->$v; $Data->... len na $... (teda bez $Data-> )
Vytvorené premenné budú lokálne, nie globálne. |
||
Časová prodleva: 11 let
|
0