Autor Zpráva
Atxl
Profil *
preg_replace($pattern, $promenna["\\1"], $zdroj);

...jak mám zapsat $promenna["\\1"]? takhle to nefunguje (funguje když tam dám samotné \\1 nebo samotné $promenna['hodnota'], ale dohromady?) a už jsem zkoušel i jinak, ale vše buď skončí s parseerror nebo nefunguje :( prosím poraďte... už si nevím rady...
llook
Profil
Jedině snad nějak s modifikátorem e.

$promenna = array('a' => 'b');
preg_replace('/a/e', '$promenna["\\1"]', 'aaaa');
Atxl
Profil *
a proc to nejde takto? co na tom je spatne...?
Atxl
Profil *
s modifikátorem e mi to také nějak nefuguje :(
llook
Profil
Zkus si představit, jak asi postupuje PHP.
- Zavoláš funkci.
- Nejdřív se zjistí hodnoty všech argumentů.
- Potom se zavolá funkce a zjištěné hodnoty se jí předaj.

Funkce teda neví, jak argument vypadal. Ví jenom, že má hodnotu NULL. Zatímco v mém případě je hodnota argumentu řetězec '$promenna["\\1"]'. Funkce preg_replace si v řetězci nejdřív nahradí odkazy na subvýrazy (\\1) a pak díky modifikátoru e řetězec vyhodnotí jako PHP výraz.
halogan
Profil
Melo by to fungovat takto:

$promenna = array('a' => 'b');
$str = "aaaa";
preg_replace('/(a)/e', 'print $promenna["\\1"]', $str);
print $str;


Ale jaski to vraci "bbbbaaaa"
Atxl
Profil *
hmm a halogane neslo by to takhle nejak aby to jaksi vracelo jen bbbb? ps: proc uz mi mesic neodpovidas na icq?
Hugo
Profil
$promenna = array('a' => 'b');
$str = "aaaa";
preg_replace('/(a)/e', 'print $promenna["\\1"]', $str);
print $str; // TOTO TISKNE TO aaaa

Takže takto to funguje

$promenna = array('a' => 'b');
$str = "aaaa";
preg_replace('/(a)/e', 'print $promenna["\\1"]', $str);
Atxl
Profil *
mno jo jenze ja stejne potrebuju aby funkce preg_replace predala hodnotu bbbb a ne 'print $promenna["neco"]' :(
Hugo
Profil
$promenna = array('a' => 'b');
$str = "aaaa";
$newStr = preg_replace('/(a)/e', '$promenna["\\1"]', $str);
Atxl
Profil *
ok, já ale potřebuju aby $newStr = 'b' a né '$promenna["a"]' :(
halogan
Profil
> hmm a halogane neslo by to takhle nejak aby to jaksi vracelo jen bbbb? ps: proc uz mi mesic neodpovidas na icq?
Jooo, to nevim, mne nic neprichazi.

> ok, já ale potřebuju aby $newStr = 'b' a né '$promenna["a"]' :(
Hugo: do newStr ti prijde true/false/-1, nikoliv vysledek
hugo_jinde
Profil *
halogan

Podle manualu by to melo fungovat. Ted to, ale nemam jak otestovat.
preg_replace() returns an array if the subject parameter is an array, or a string otherwise.
Atxl
Profil *
>> ok, já ale potřebuju aby $newStr = 'b' a né '$promenna["a"]' :(
> Hugo: do newStr ti prijde true/false/-1, nikoliv vysledek

halogane to je blbost...viz manuál:
<?php
$str = 'foo o';
$str = preg_replace('/\s\s+/', ' ', $str);

// This will be 'foo o' now
echo $str;
?>

$newStr by tedy "měl" obsahovat 'bbbb' a ne true/false...
halogan
Profil
Atxl: Promin, spletl jsem si to s preg_match
Honza Široký
Profil
Já bych to udělal takhle:

function replace_function ($matches) {
$array = array (
'a' => 'b',
'x' => 'y'
);
return $array[$matches[0]];
}

$string = 'a x b y';
echo preg_replace_callback ('~a|x~', 'replace_function', $string); // vypisuje "b y b y";
Atxl
Profil *
ok takhle to mám taky řešený ;) ale myslel jsem že to jde jednodušeji... tak pokud nejde díky všem ;)
Toto téma je uzamčeno. Odpověď nelze zaslat.