Zaawansowane zamiany z preg_replace_callback()
Założenie: Nauczymy się używać funkcji preg_replace_callback() do dynamicznego formatowania tekstu, w szczególności liczb.
Krok po kroku:
- Definicja funkcji callback: Zdefiniujemy funkcję, która będzie wywoływana dla każdego dopasowania wzorca w tekście. Funkcja ta otrzyma dopasowany fragment tekstu jako argument i zwróci sformatowaną wersję.
- Użycie preg_replace_callback(): Wykorzystamy funkcję
preg_replace_callback()do zastąpienia wszystkich liczb w tekście sformatowanymi wersjami.
function formatujLiczbe($matches) {
return number_format($matches[0], 2, ',', ' ');
}
Funkcja formatujLiczbe() przyjmuje tablicę dopasowań ($matches) i formatuje pierwszą wartość ($matches[0]) używając funkcji number_format(). Formatowanie ustawione jest na dwie cyfry po przecinku, separator dziesiętny – przecinek, separator tysięcy – spacja.
$tekst = "Cena produktu wynosi 1234.56 zł, a rabat to 50.75 zł.";
$nowyTekst = preg_replace_callback('/\d+(\.\d+)?/', 'formatujLiczbe', $tekst);
echo $nowyTekst; // Wynik: Cena produktu wynosi 1 234,56 zł, a rabat to 50,75 zł.
preg_replace_callback('/\d+(\.\d+)?/', 'formatujLiczbe', $tekst) zastępuje wszystkie liczby (wzorzec /\d+(\.\d+)?/) w zmiennej $tekst, wywołując dla każdego dopasowania funkcję formatujLiczbe().
Ten przykład pokazuje, jak za pomocą preg_replace_callback() można dynamicznie modyfikować tekst, co jest bardzo przydatne w wielu sytuacjach, np. przy formatowaniu danych przed wyświetleniem.