Autor | Zpráva | ||
---|---|---|---|
regy Profil |
#1 · Zasláno: 11. 7. 2011, 22:01:05
Drazí programátoři,
nevíte prosím, jak např. ve funkci ereg_replace využít referenci jako název prvku? Př $cisla['jedna'] = "1"; $cisla['dva'] = "2"; $cisla['tri'] = "3"; $text = "::jedna:: ::dva:: ::tri::"; $text = ereg_replace("::([^:]*)::","".$cisla['\\1']."",$text); echo $text; Potřeboval bych, aby program vypsal 1 2 3, ale nefunguje to. Máte nějaké nápady? Předem díky |
||
Majkl578 Profil |
#2 · Zasláno: 11. 7. 2011, 22:11:15
K tomu by se hodilo použít preg_replace_callback a provést tu operaci v callbacku.
|
||
Tori Profil |
#3 · Zasláno: 11. 7. 2011, 22:22:47 · Upravil/a: Tori
Majkl578:
Už jsem se dlouho chtěla zeptat: Jsou proti používání modifikátoru e v preg_replace podobné výhrady, jako proti eval? V JavaScriptu se všechen kód zapisovaný jako řetězec bere dosti negativně, ale v PHP témách se to myslím zatím tolik neřešilo. Jestli byste třeba použil tohle, a pokud ne, tak proč ne? (předpokládejme PHP 5.2) preg_replace("/::([^:]*?)::/e", '$cisla["\\1"]', $text); |
||
Majkl578 Profil |
#4 · Zasláno: 12. 7. 2011, 00:00:06
[#3] Tori:
Zejména rychlost: $cisla = array( 'jedna' => 1, 'dva' => 2, 'tri' => 3, ); $text = '::jedna:: ::dva:: ::tri::'; $a = microtime(TRUE); for ($i = 0; $i < 100000; $i++) { preg_replace('~::([^:]+)::~Ue', '$cisla[\'\1\']', $text); } echo microtime(TRUE) - $a; echo '<br>'; $b = microtime(TRUE); for ($i = 0; $i < 100000; $i++) { preg_replace_callback('~::([^:]+)::~U', function (array $m) use ($cisla) { return $cisla[$m[1]]; }, $text); } echo microtime(TRUE) - $b; „V JavaScriptu se všechen kód zapisovaný jako řetězec bere dosti negativně“ To v PHP taky, pomineme-li možná bezpečnostní rizika, špatně se to debuguje a je to hlavně brutálně pomalé: $a = microtime(TRUE); for ($i = 0; $i < 100000; $i++) { echo NULL; } echo microtime(TRUE) - $a; echo '<br>'; $b = microtime(TRUE); for ($i = 0; $i < 100000; $i++) { eval('echo NULL;'); } echo microtime(TRUE) - $b; NULL je tam kvůli jednoduchosti).
|
||
Časová prodleva: 13 let
|
0