Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php] preg_replace i index tablicy asocjacyjnej, Problem z użyciem zmienej \\1 jako indeksu tablicy
aeonyx
post 14.01.2009, 13:45:01
Post #1





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 14.01.2009

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
Snap
post 14.01.2009, 14:08:55
Post #2





Grupa: Zarejestrowani
Postów: 75
Pomógł: 4
Dołączył: 29.05.2005

Ostrzeżenie: (0%)
-----


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. ?>
Go to the top of the page
+Quote Post
Zyx
post 14.01.2009, 14:14:31
Post #3





Grupa: Zarejestrowani
Postów: 952
Pomógł: 154
Dołączył: 20.01.2007
Skąd: /dev/oracle

Ostrzeżenie: (0%)
-----


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

Ten post edytował Zyx 14.01.2009, 14:15:24


--------------------
Specjalista ds. głupich i beznadziejnych, Zyx
Nowości wydawnicze: Open Power Collector 3.0.1.0 | Open Power Autoloader 3.0.3.0
Go to the top of the page
+Quote Post
aeonyx
post 14.01.2009, 14:29:21
Post #4





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 14.01.2009

Ostrzeżenie: (0%)
-----


Dziękuje bardzo za profesjonalną odpowiedź. Działa bez najmniejszego zarzutu.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.06.2025 - 18:16