Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] Losowe wyrazy
-Krzych00-
post 30.07.2008, 08:51:44
Post #1





Goście







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
Go to the top of the page
+Quote Post
Kostek.88
post 30.07.2008, 09:12:03
Post #2





Grupa: Zarejestrowani
Postów: 376
Pomógł: 47
Dołączył: 23.08.2007
Skąd: Warszawa

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


A może zastosuj tablice? One dają większe możliwości
Go to the top of the page
+Quote Post
no_face
post 30.07.2008, 09:40:28
Post #3





Grupa: Zarejestrowani
Postów: 346
Pomógł: 23
Dołączył: 28.11.2004

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


  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
Go to the top of the page
+Quote Post
-Krzych00-
post 30.07.2008, 10:47:35
Post #4





Goście







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}}
Go to the top of the page
+Quote Post
no_face
post 30.07.2008, 11:43:22
Post #5





Grupa: Zarejestrowani
Postów: 346
Pomógł: 23
Dołączył: 28.11.2004

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


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
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: 18.07.2025 - 18:16