X

Aleproste na FaceBook'u

Reklama.

[PHP] Preg_repalce :: zamiana tablicowa wartości

Jak zamienić wartości jednej tablicy na odpowiednie wartości drugiej tablicy za pomocą preg_replace i wyrażenia regularnego?

Pisząc ostatnio skrypt wystawiający aukcję na Allegro straciłem sporo czasu, zanim znalazłem jak się okazało trywialny błąd. Problem wydaje się prosty do rozwiązania, ale jak się okazało wymagał więcej uwagi. Na pierwszy rzut oka wszystko jest tak jak trzeba, a jednak działa wadliwie.

Oto przykładowy kod, który powinien zamienić cyfrę 4 na 14:

<?
$t = '4';

$t = preg_replace(array('/4/','/3/','/2/','/1/','/0/'), array(14,10,7,5,3), $t);
?>

Oczekujemy, że wynikiem działania funkcji będzie wartość 14, a mimo to otrzymujemy 54. Dlaczego?

Dlatego, że dopasowanie następuje dla wszystkich wartości tablicy po kolei i na dodatek wyrażenie wejściowe może zmieniać się dynamicznie po każdym kolejnym dopasowaniu. Zatem w pierwszym kroku wartość 4 zostanie zamieniona na 14, ale w czwartym kroku jedynka zostanie zamieniona na 5 i tak zamiast 14 dostajemy 54.

Prosty trik polega na doklejeniu z przodu znaku, który nie występuje w drugiej tablicy. Oto przykład:

<?
$t = '_4';

$t = preg_replace(array('/_4/','/_3/','/_2/','/_1/','/_0/'), array(14,10,7,5,3), $t);
?>

Teraz 1 nie zostanie dopasowana, gdyż dopasowanie dotyczy łańcucha '_1'.

starr

opublikowane 02-03-2010175376 powrót

© aleproste.pl v.10 Projekt i realizacja projekt.etvn.pl & aleproste.pl