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

0

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

$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!

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:

$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():
    $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()
    $tresc = preg_replace('/{user:([0-9]+)}/i', 'zamiennik:$1', $tresc);
    
0

@Riddle: Niestety kod:

  $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.

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?

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.

0

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

1 użytkowników online, w tym zalogowanych: 0, gości: 1