Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] preg_replace i index tablicy asocjacyjnej
Forum PHP.pl > Forum > PHP
aeonyx
Mam problem dotyczący użycia polecenia preg_replace, potrzebuje zrobić następującą rzecz :

Otrzymuje w zmiennej $kod - kod mający następujące formaty:
Kod
AL 100%

Kod
ZN 50%, AL 50%

itp.... Kody pierwiastków mogą mieć od jednego do 3 znaków

teraz mam tablice asocjacyjną z symbolami pierwiastków i ich nazwami
Kod
   $source = array (
       'AL'    => 'ALUMINIUM',
       'ZN'    => 'ZINCUM');



mam za zadanie wyświetlić wyłącznie przy użyciu polecenia preg_replace i podanych zmiennych coś takiego.

AL 100% - ALUMINIUM 100%
AL 50%, ZN 50% - ALUMINIUM 50%, ZINCUM 50%

napisałem takie coś:

Kod
echo $textiles." - ".preg_replace ('/(\w+) (\d+)/', '$source[\'$1\']' ,$kod);


ale niestety nie wyświetla się wartość o podanym indeksie. Otrzymuje coś takiego

Kod
AL 50%, ZN 50% - $source['AL']%, $source['ZN']%


jak wyświetlić cyfrę odpowiadającą za procenty wiem. Problem w tym że nie mogę użyć zmiennej wewnętrznej polecenia preg_replace jako indeksu tablicy.

Próbowałem z rożnymi zapisami, wtedy jednak otrzymuje takie błędy.

Kod
<b>Notice</b>:  Undefined index:  $1 in <span style="font-weight: bold;">xxxxxx</span><b>\index.php</b> on line <b>30</b>

Kod
<b>Notice</b>:  Undefined index:  \1 in <span style="font-weight: bold;">xxxxxx</span><b>\index.php</b> on line <b>30</b>


itp. Może ktoś już się spotkał z takim problemem. Użycie innego polecenia lub kombinacji nie wchodzi w grę. Proszę o dokładne przeczytanie. Dziękuję za ewentualną pomoc.
Snap
A może coś w ten deseń ?

  1. <?php
  2. $source = array('ZN 50%', 'AL 50%');
  3.  
  4. $pattern = array('/AL/', '/ZN/');
  5.  
  6. $replacement = array('ALUMINIUM', 'ZINCUM');
  7.  
  8. foreach($source as $string) {
  9.    echo preg_replace($pattern, $replacement, $string);
  10. }
  11. ?>
Zyx
Aby zamiennik był parsowany jako kod PHP, w wyrażeniu regularnym musisz użyć modyfikatora e:

Kod
preg_replace('/wyrazenie/e', 'kod PHP', $tekst);


Ponadto istnieje także funkcja preg_replace_callback(), gdzie wszystkie znalezione wystąpienia są kierowane do wskazanej funkcji PHP, która generuje zamiennik.

Szczegóły odnośnie użycia modyfikatora znajdziesz tutaj: http://pl.php.net/manual/pl/reference.pcre...n.modifiers.php
aeonyx
Dziękuje bardzo za profesjonalną odpowiedź. Działa bez najmniejszego zarzutu.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.