Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Mieszarka synonimów
Forum PHP.pl > Forum > PHP
atomas

witajcie

znalaazłem w sieci taki generator tekstów
liderman

autor twierdzi że wszystko powinno działać, a mi urywa teksty, nie losuje całego zdania, tylko bliżej nieokreślone fragmenty:

  1. function getRandomPart($text)
  2. {
  3. $openLevel = 0;
  4. $lastPos = 0;
  5. $isIgnore = false;
  6. $parts = array();
  7. $textLen = mb_strlen($text, 'UTF-8');
  8. for ($i = 0; $i < $textLen; $i++) {
  9. $currentChar = mb_substr($text, $i, 1, 'UTF-8');
  10. if ($currentChar === '{') {
  11. $openLevel++;
  12. $isIgnore = true;
  13. continue;
  14. }
  15.  
  16. if ($currentChar === '}') {
  17. $openLevel--;
  18. if ($openLevel === 0) {
  19. $isIgnore = false;
  20. }
  21.  
  22. continue;
  23. }
  24.  
  25. if ($isIgnore === true) {
  26. continue;
  27. }
  28.  
  29. if ($currentChar === '|') {
  30. $parts[] = mb_substr($text, $lastPos, ($i - $lastPos), 'UTF-8');
  31. $lastPos = $i + 1;
  32. }
  33. }
  34.  
  35. $parts[] = mb_substr($text, $lastPos, null, 'UTF-8');
  36.  
  37. return $parts[array_rand($parts)];
  38. }
  39.  
  40.  
  41. function generate($text)
  42. {
  43. $startSafePos = 0;
  44. $startPos = 0;
  45. $endPos = 0;
  46. $openLevel = 0;
  47. $isFind = false;
  48. $result = '';
  49. $textLen = mb_strlen($text, 'UTF-8');
  50. for ($i = 0; $i < $textLen; $i++) {
  51. if (mb_substr($text, $i, 1, 'UTF-8') === '{') {
  52. if ($openLevel === 0) {
  53. $startPos = $i;
  54. $result .= mb_substr($text, $startSafePos, $startPos - $startSafePos, 'UTF-8');
  55. }
  56.  
  57. $openLevel++;
  58. continue;
  59. }
  60.  
  61. if (mb_substr($text, $i, 1, 'UTF-8') === '}') {
  62. $openLevel--;
  63.  
  64. if ($openLevel === 0) {
  65. $isFind = true;
  66. $endPos = $i;
  67.  
  68. $startSafePos = $i + 1;
  69.  
  70. $result .= generate(
  71. getRandomPart(
  72. mb_substr($text, $startPos + 1, $endPos - ($startPos + 1), 'UTF-8')
  73. )
  74. );
  75.  
  76. continue;
  77. }
  78. }
  79. }
  80.  
  81. if ($isFind === false) {
  82. return $text;
  83. }
  84.  
  85. return $result . mb_substr($text, $endPos + 1, null, 'UTF-8');
  86. }
  87. echo generate("{Good {morning|evening|day}|Goodnight|Hello}, {friend|brother}! {How are you|What's new with you}?");



wydaje mi się, że autor strywializował problem, ale może ktoś na forum wie jak poprawić te metody (wyłowiłem funkcje metod z klasy), albo podpowie mi dobry algorytm do tego, bo ja od kilku dni nad tym siedzę i nie mam pomysłu,
udało mi się tylko wymyślić walidację tego typu tekstów
nospor
Czemu nie uzyjesz kodu autora jako calosc tylko wyciales pare metod z klasy i na nich dzialasz? Nie sadzisz ze najzwyklej w swiecie popelniles blad podczas wycinania??
atomas
Oczywiście, że testowałem cały kod i efekty są takie same, raczej niemożliwe, żeby klasa się źle odpaliła
nospor
Ja tam pobralem te klase i odpalilem podane tam przyklady i jakos wszystko dziala. Autor stworzyl tez testy i tez dzialaja wiec raczej ty cos tam namotales.
atomas
Dziękuję za pochylenie się nad tym.
Może winą jest moja wersja PHP. Ja mam 5.3 autor wymaga 5.4.9

Może ktoś da linka do jakiegoś tutoriala jak korzystać z takich testów. ja w obiektowym jestem bardziej niż początkujący.
nospor
Nie mozesz zrobic upgrade php? 5.3 to dosc stary....

Co do testow to jest to phpunit. Tobie i tak to do niczego nie potrzebne tutaj wiec po co se glowe zawracasz testami? Testy tylko by pokazac ze dziala i dziala. Wina pewnie w tej wersji php.
atomas

tak, po podniesieniu php na 5.5 zadziałała zarówno klasa jak i wyjęta z niej sama metoda funkcyjnie
dziękuję, bo sam bym się poddał
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.