Autor | Zpráva | ||
---|---|---|---|
stream Profil * |
#1 · Zasláno: 5. 6. 2008, 19:18:37
takže o co jde. potřebuji aby v templatu (načtený ve stringu do proměný $TEMPLATE) se nahradily všechny výskity %nazev% za obsah proměný (pole) s indexem nazev... takže $pole[nazev]
myslel jsem že to pujde takhle $TEMPLATE = preg_replace("/\%(.*)\%/",$RS_lang['$1'],$TEMPLATE); ale bohužel nejde :\ budu moc vděčný za všechny rady |
||
lordfrikk Profil |
#2 · Zasláno: 5. 6. 2008, 19:22:59
Zkus namísto "/\%(.*)\%/" použít "/\%(.*)\%/U".
|
||
stream Profil * |
#3 · Zasláno: 5. 6. 2008, 19:42:33
mno i s tímhle problém přetrvává... problém není ani tolik v regulérním výrazu jako v zápisu indexu pole... do $1 dostanu to co potřebuji tedy nazev. jenže když dosadím '$0' do indexu tak se to chová jako string "$0" nikoliv jako nazev :\
|
||
lordfrikk Profil |
#4 · Zasláno: 5. 6. 2008, 21:41:21
Odstraň uvozovky kolem $0. Jednoduché uvozovky způsobují, že řetězec je vyhodnocen doslovně a ne interpretován jako proměnná.
|
||
stream Profil * |
#5 · Zasláno: 6. 6. 2008, 16:59:59
to pak vyhodí tuhle hlášku:
Parse error: syntax error, unexpected T_LNUMBER, expecting T_VARIABLE or '$' in ... on line 35 |
||
bukaj Profil |
#6 · Zasláno: 6. 6. 2008, 18:56:59
stream
$TEMPLATE = preg_replace("/\%(.*)\%/",$RS_lang['$1'],$TEMPLATE); Jen těžko to půjde takhle. PHP je jazyk s eager evaluation (radši nepřekládám do češtiny), kdy se nejdříve všechny parametry fce vyhodnotí a pak se předá jejich hodnota. Takže první parametr je řetězec ("/\%(.*)\%/"), nepotřebuje se již dál vyhodnocovat. Ale druhý je proměnná ($RS_lang['$1']), tudíž se PHP pokusí najít ve své tabulce proměnných tu označenbou jako RS_lang, a když ji najde a zjistí, že je to pole, pokusí se najít její index '$1', který s největší pravděpodobnostá neexistuje, takže jako druhý parametr se do fce preg_replace() předá NULL. Třetí parametr -- zase proměnná ($TEMPLATE) -- zase se pokusí najít jejíc hodnotu. Takže toto volání je nejspíš jako volat preg_replace("/\%(.*)\%/", NULL, "...string s templatem..."); Jestli se snažíš o to, co myslím -- výskyt %promenna% nahradit hodnotou z $RS_lang['promenna'] -- tak to takhle nepůjde. Nejjednodušší podle mě je si k tomu vyrobit objekt, ve kterém se bude volat preg_replace_callback() na instanční fci. Lepší bude příklad: <?php class Replacer { private $RS_lang; private $TEMPLATE; public function __construct(array $RS_lang, $TEMPLATE) { $this->RS_lang = $RS_lang; $this->TEMPLATE = $TEMPLATE; $this->TEMPLATE = preg_replace_callback( "/\%(.*)\%/", array($this, 'callback_func'), // callback na instanční fci callback_func $this->TEMPLATE ); } private function callback_func($matches) { return $this->RS_lang[$matches[1]]; } public function __toString() { return $this->TEMPLATE; } } $i = new Replacer(array('hello_world' => 'Ahoj světe!'), '<h1>%hello_world%</h1>'); echo $i; // vypíše "<h1>Ahoj světe!</h1>" |
||
stream Profil * |
#7 · Zasláno: 6. 6. 2008, 21:13:38
zatim OOP v php moc nerozumim ale to se časem vyřeší aspon mám co zkoumat XD moc díky :-))
|
||
Časová prodleva: 16 let
|
0