Jak podmienić notacje użytkownika jego nazwą po id?

Jak podmienić notacje użytkownika jego nazwą po id?
CA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 60
0

Cześć! Zastanawiam się w jaki sposób mogę skorzystać ze zmiennej w patternie do odczytania danych z tablicy, mam taki kod:

Kopiuj
$userzy = array();
$userzy[100]='Jakaś tam nazwa';

$tresc = preg_replace('/{user:([0-9]+)}/i', $userzy["$1"], $tresc);

Czy jest możliwe, aby przy użyciu zmiennej z preg_replace() odczytać dane z tablicy?

Pozdrawiam!

Riddle
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 10230
1
catshy napisał(a):

Cześć! Zastanawiam się w jaki sposób mogę skorzystać ze zmiennej w patternie do odczytania danych z tablicy, mam taki kod:

Kopiuj
$userzy = array();
$userzy[100]='Jakaś tam nazwa';

$tresc = preg_replace('/{user:([0-9]+)}/i', $userzy["$1"], $tresc);

Czy jest możliwe, aby przy użyciu zmiennej z preg_replace() odczytać dane z tablicy?

Pozdrawiam!

Możesz to zrobić na dwa sposoby,

  • Używajac preg_replace_callback():
    Kopiuj
    $tresc = preg_replace_callback('/{user:([0-9]+)}/i', function (array $match): string {
      $id = $match[1];
    
      return 'zamiennik:' . $id;
    }, $tresc);
    
  • Używając tzw. "reference" w zamienniku z preg_replace()
    Kopiuj
    $tresc = preg_replace('/{user:([0-9]+)}/i', 'zamiennik:$1', $tresc);
    
CA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 60
0

@Riddle: Niestety kod:

Kopiuj
  $tresc = preg_replace_callback('/{user:([0-9]+)}/i', function (array $match): string {
    $id = $match[1];

    return $userzy[$id];
  }, $tresc);

nadal zwraca pusty wynik, tablica $userzy nie jest ładowana do funkcji. Próbowałem z global ale też bez efektu.

Riddle
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 10230
4
catshy napisał(a):

nadal zwraca pusty wynik, tablica $userzy nie jest ładowana do funkcji.

Aaa, czyli chcesz wyciągnąć id usera ze stringa, i podmienić go odpowiednim indeksem z tablicy $users?

Kopiuj
function replaceUsers(string $subject, array $users): string {
  return preg_replace_callback('/{user:([0-9]+)}/i', function (array $match) use ($users): string {
    $fullMatch = $match[0];
    $id = $match[1];
    if (\array_key_exists($id, $users)) {
      return $users[$id];
    }
    throw new Exception("User '$fullMatch' not found");
  }, $subject);
}

$users = [
  103 => 'Mark',
  123 => 'John',
];

echo replaceUsers("Mój string składa się z {user:103} oraz {UsEr:123}", $users);
catshy napisał(a):

Próbowałem z global ale też bez efektu.

Zapomnij że istnieje w ogóle coś takiego jak global.

CA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 60
0

Dziękuję :) teraz działa jak należy

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.