Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Losowe wyrazy
Forum PHP.pl > Forum > Przedszkole
Krzych00
Witam,
Właściwie nie potrzebuję kodu, a pomyslu na wykonanie smile.gif Mam taki kodzik:
  1. <?php
  2. $wzor = "{Hej|Czesc}{Tomek|Adam}";
  3.  
  4. function losuj($wzor) {
  5. preg_match_all("/{(.+?)}/", $wzor, $data);
  6. print_r ($data);
  7. $i = count ($data[1]);
  8. for ($x = 0; $x <= $i-1; $x++) {
  9. $tmp = explode('|', $data[1][$x]);
  10. $ile = count($tmp);
  11. $iles = rand(0, $ile-1);
  12. print $tmp[$iles];
  13. }
  14.  
  15. }
  16. losuj($wzor);
  17. ?>

Skrypt ma za zadanie losowanie ze wzorca odpowiednych wyrazow i ich zwracanie. Tu zwróci na przyklad CzescAdam. Chcialbym jednak dopisać do skryptu zagnieżdżenia, np dla:
  1. <?php
  2. $wzor = "{Hej|Czesc}{Tomek{Kowalski|Nowak}|Adam{Adamczyk|Lepper}}";
  3. ?>

CzescAdamAdamczyk badź HejAdamLepper. Nie wiem jak sobie poradzić z zagnieżdżeniem "{}". Jakieś pomysły? smile.gif
Kostek.88
A może zastosuj tablice? One dają większe możliwości
no_face
  1. <?php
  2. $wzor = "{Powitanie w roznych wariantach}{Imiona w roznych wariantach}{nazwiska w ro
    znych wariantach}"
    ;
  3. ?>

np

  1. <?php
  2. $wzor = "{Hej|Czesc}{Tomek|Jurek|Adam}{Adamczyk|Lepper|Kaczynski}";
  3. ?>


Przebuduj troche kod, a bedziesz mogl korzystac z wiekszej ilosci mozliwosci

Polecam jednak zastosowac tablice jak poprzednik wspomnial, czy to tablice jednowymiarowa

  1. <?php
  2. $wzor = array('Hej|Czesc', 'Tomek|Jurek|Adam', 'Adamczyk|Lepper|Kaczynski');
  3. ?>


czy wielowymiarowa:

  1. <?php
  2. $wzor = array(
  3.  array('Hej', 'Czesc'),
  4.  array('Tomek', 'Jurek', 'Adam'),
  5.  array('Adamczyk', 'Lepper', 'Kaczynski')
  6.  );
  7. ?>


Stosujac petelke do poruszania sie po tablicach w polaczeniu z rand(); uzyskasz zadany efekt
Krzych00
Niestety, chodzi o to, żeby funkcja obsługiwala wzorzec taki, jak podałem w pierwszym poście. Z tablicami nie bylo by problemu winksmiley.jpg
  1. <?php
  2. $wzor = "{Hej|Czesc}{Tomek|Jurek|Adam}{Adamczyk|Lepper|Kaczynski}";
  3. ?>

Z powyższym nie ma problemu, bo losuje prawidłowo. Nie wiem jednak jak zaimplementować obsługę zagnieżdżeń. Chodzi mi o pogrubione fragmenty.
{Hej|Czesc}{Tomek{Kowalski|Nowak}|Adam{Adamczyk|Lepper}}
no_face
W takim razie zastosuj dodatkowe znaki (niewystepujace w ciagu), ktorymi posluzysz sie przy wydzielaniu zagniezdzen, np

Kod
{Hej|Czesc}{Tomek>Kowalski|Nowak}{Adam>Adamczyk|Lepper}

Pozniej:
- dzielisz wszystko pregiem {}
- splitujesz ciag 'Tomek>Kowalski|Nowak' znakiem '>'
- otrzymujesz 'Tomek' i 'Kowalski|Nowak'
- z lewej masz imie, teraz tylko splitujesz 'Kowalski|Nowak' i randujesz nazwiska
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.