Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] REGEX + podmiana wartością z tablicy po ID
Forum PHP.pl > Forum > Przedszkole
lukasamd
Witam,
wiem, nazwa pewnie niezbyt wiele Wam mówi, więc już tłumaczę o co chodzi.

Mam tablicę $array_chars wyglądającą tak:

  1. $array_chars = array(
  2. '1' => 'jablko',
  3. '2' => 'pomarancz',
  4. '4' => 'gruszka',
  5. '6' => 'sliwka',
  6. '8' => 'kiwi');


Mam tekst, w którym za pomocą regexa chciałbym znaleźć coś takiego:

owoc-X-opis
gdzie X to wartość liczbowa, zaś opis to tekst

a następnie zamienić w nim słowo owoc na wartość $array_chars[X].

Jak to zrobić... łatwo i sensownie? Próbowałem i mam kod który działa, ale na 100% od nowa wynajduję koło, ponieważ najpierw wyszukuję i zapisuję, a dopiero później podmieniam, a wydaje mi się, że da się zrobić te operacje za jednym zamachem.
tvister
preg_replace

w manualu przykład nr 2
lukasamd
No nie bardzo, ja nie chcę zamieniać wartości z jednej tablicy na wartości drugiej,
lecz wzorzec na wartość z tablicy o id zawartej w tym wzorcu.

Nie działający przykład pokazujący o co chodzi:

  1. $array_chars = array(
  2. '1' => 'jablko',
  3. '2' => 'pomarancz',
  4. '4' => 'gruszka',
  5. '6' => 'sliwka',
  6. '8' => 'kiwi');
  7.  
  8.  
  9. $ciag = 'To jest testowy tekst owoc-1-a takze owoc-2 moze byc i dzis owoc-8';
  10.  
  11. $wzorzec = '/owoc-\d+/';
  12.  
  13. echo preg_replace($wzorzec, $array_chars, $ciag);


W efekcie chcę otrzymać:

To jest testowy tekst jablko-a takze pomarancz moze byc i dzis kiwi




EDIT:


Sprawdziłem manual no i zrobiłem coś takiego:


  1. $wzorzec = '/owoc-(\d+)/';
  2.  
  3. function podmien_tekst($matches)
  4. {
  5. global $array_chars;
  6. return $array_chars[$matches[1]];
  7. }
  8.  
  9. echo preg_replace_callback($wzorzec, 'podmien_tekst',$ciag);


No i działa biggrin.gif
Już chyba bardziej uprościć się tego nie da, po to jest ten callback raczej.
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.