Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php]zamina ciągu na losowy wyraz z tego ciągu
Forum PHP.pl > Forum > Przedszkole
OlgaG
Mam następujący problem: mam jakiś tekst w zmiennej $content. W nim są zaznaczone fragmenty{napis1|napis2|napis3}. Chodzi o to by zastąpić cały ciąg w nawiasach {} na jeden z wyrazów oddzielonych | .

Doszłam do czegoś takiego:

  1. <?php
  2. preg_match_all("#{(.*?)}#si", $content, $tab, PREG_SET_ORDER);
  3.  
  4. $t = count($tab);
  5.  
  6. $words = array();
  7.  
  8. for($i = 0; $i<$t;$i++)
  9. {
  10. $words[] = $tab[$i][1];
  11. }
  12.  
  13. $word = array();
  14.  
  15. foreach($words as $value)
  16. {
  17. $word[] = (explode("|", $value));
  18. }
  19. ?>


No i tak nie bardzo wiem co dalej. Jak przejść po elementach tej tablicy(tablica w tablicy) i wylosować z niej jakąś wartość. Druga sprawa to jak to potem wrzucić do tekstu, czyli $content.
blinksmiley.gif
Dzięki za pomoc.
Hazel
  1. <?php
  2. $content = "{1|2|3}";
  3. preg_match_all("#{(.*?)}#si", $content, $tab, PREG_SET_ORDER);
  4.  
  5. $t = count($tab);
  6.  
  7.  
  8. for($i = 0; $i<$t;$i++)
  9. {
  10. $words[] = $tab[$i][1];
  11. }
  12.  
  13. foreach($words as $value)
  14. {
  15. $word = (explode("|", $value));
  16. }
  17. $losowa = rand(0, count($word));
  18. $wynik = $word[$losowa];
  19. ?>


o to chodzi?

ewentualnie masz mało przydatną funkcję array_rand" title="Zobacz w manualu PHP" target="_manual, ale w tym przypadku może ona okazać się pomocna, dwa ostatnie wiersze możesz zastąpić: array_rand($word).
edyta: parę literówek w kodzie
OlgaG
Niestety nie o to chodzi:(

Jak mam tabelę $word:

  1. <?php
  2. (
  3. [0] => Array
  4. (
  5. [0] => dobry
  6. [1] => lepszy
  7. [2] => najlepszy
  8. )
  9.  
  10. [1] => Array
  11. (
  12. [0] => zly
  13. [1] => gorszy
  14. [2] => najgorszy
  15. )
  16.  
  17. [2] => Array
  18. (
  19. [0] => 1
  20. [1] => 2
  21. [2] => 3
  22. )
  23.  
  24. )
  25. ?>


to chciałabym wyciągnąć z niej wartość losową z tablicy o indeksie [0], następnie z tablicy o indeksie [1] a potem z tablicy o ideksie [2].

Zastanawiam się jednak czy to jest w ogóle dobra droga, żeby rozwiązać ten problem, bo potem te wylosowane wyrazy trzeba jakoś powrzucać w odpowiednie miejsca w zmiennej $content.
Hazel
No to stosujesz array_rand()...
  1. <?php
  2. for ($i=0; $i<count($word); $i++)
  3. {
  4. $losowa[$i] = $word[$i][array_rand($word[$i])];
  5. }
  6. ?>

i teraz masz w tablicy $losowa 3 losowe wartości i możesz z nimi robić co tylko chcesz...
Cytat
te wylosowane wyrazy trzeba jakoś powrzucać w odpowiednie miejsca w zmiennej $content

A jakie to są odpowiednie miejsca w tym ciągu?
OlgaG
Cytat
A jakie to są odpowiednie miejsca w tym ciągu?


Cała tablica $word wzięła się z tego, że z tekstu zapisanego w $content wyciągam ciągi zawarte w nawiasach {}. Mają one przykładową postać {wyraz1|wyraz2|wyraz3} (ilość wyrazów w nawiasie jest zmienna). Chodzi o to by:

1. wyciągnąć ze $content wszystkie ciągi w nawiasach {}
2. z każdego takiego ciągu wylosować 1 wyraz.

Stąd zastanawiam się na, jak teraz wylosowane wyrazy powrzucać w odpowiednie miejsca w zmiennej $content. worriedsmiley.gif
Hazel
Ale jaką postać ma mieć wynik, o to pytałem - wiem co robi ten skrypt i jak powstaje tablica $word, bo zadałem sobie trud analizy kodu tongue.gif Czy wyjściowa postać $content ma wyglądać tak:
{wylosowany_wyraz1}{wylosowany_wyraz2}... ?
Jeśli tak, to masz kod:
  1. <?php
  2. $wynik = "";
  3. foreach ($losowa as $wylosowany_wyraz)
  4. {
  5. $wynik .= '{'.$wylosowany_wyraz.'}';
  6. }
  7. ?>
OlgaG
Sorry, myślałam, że nie czytałeś początku wstydnis.gif

Zmienna kontent oprócz ciągów w nawiasach zawiera zwykły tekst, więc końcowa postać ma być taka jak zwykły tekst: Zwykły tekst zwykły tekst wylosowany wyraz(z pierwszego nawiasu) dalej zwykły tekst dalej zwykły tekst wylosowany wyraz (z drugiego nawiasu zwykły tekst ....itd.

Czyli pozostaje kwestia powstawiania w miejsca gdzie był do tej pory nawias{} z wyrazami do losowania tego wyrazu (bez żadnych ozdobników, tak by stał się częścią tekstu).
Hazel
preg_replace" title="Zobacz w manualu PHP" target="_manual
chyba to wszystko...
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.