Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Problem z for()
Forum PHP.pl > Forum > Przedszkole
Adiqus
  1. <?php
  2.  
  3. include "form.html";
  4.  
  5. $text=$_POST['text'];
  6.  
  7. $text=strtolower($text);
  8. $text=ucfirst($text);
  9.  
  10. /*$i=(int)$_POST['ile'];
  11.  
  12. for($p=0; $p<$i; $p++) {*/
  13.  
  14. $i=strlen($text);
  15.  
  16. $z=$i;
  17.  
  18. for($a=0; $a<$i; $a++) {
  19. $znak=substr($text, 0 , 1);
  20. $text=substr($text, 1, ($z-1));
  21. $z=strlen($text);
  22.  
  23. $kod=ord($znak);
  24.  
  25. $x=$kod;
  26.  
  27. $dodaj=(int)$_POST['dodaj'];
  28.  
  29. $kod=$kod+$dodaj;
  30.  
  31.  
  32. while($kod>122) {
  33.  
  34. $kod=65+$kod-122+6;
  35.  
  36. }
  37.  
  38. if ($kod>96) {
  39.  
  40. $x=$kod-6;
  41.  
  42. if($x<97) {
  43.  
  44. $kod=$x;
  45.  
  46. }
  47. }
  48. if($kod==91 || $kod==92 || $kod==93 || $kod==94 || $kod==95 || $kod==96) {
  49.  
  50.  
  51. $kod=96+$kod-90;
  52.  
  53.  
  54. }
  55.  
  56. switch($kod) {
  57.  
  58. case 65: $znak="A"; break;
  59. case 66: $znak="B"; break;
  60. case 67: $znak="C"; break;
  61. case 68: $znak="D"; break;
  62. case 69: $znak="E"; break;
  63. case 70: $znak="F"; break;
  64. case 71: $znak="G"; break;
  65. case 72: $znak="H"; break;
  66. case 73: $znak="I"; break;
  67. case 74: $znak="J"; break;
  68. case 75: $znak="K"; break;
  69. case 76: $znak="L"; break;
  70. case 77: $znak="M"; break;
  71. case 78: $znak="N"; break;
  72. case 79: $znak="O"; break;
  73. case 80: $znak="P"; break;
  74. case 81: $znak="Q"; break;
  75. case 82: $znak="R"; break;
  76. case 83: $znak="S"; break;
  77. case 84: $znak="T"; break;
  78. case 85: $znak="U"; break;
  79. case 86: $znak="V"; break;
  80. case 87: $znak="W"; break;
  81. case 88: $znak="X"; break;
  82. case 89: $znak="Y"; break;
  83. case 90: $znak="Z"; break;
  84. case 97: $znak="a"; break;
  85. case 98: $znak="b"; break;
  86. case 99: $znak="c"; break;
  87. case 100: $znak="d"; break;
  88. case 101: $znak="e"; break;
  89. case 102: $znak="f"; break;
  90. case 103: $znak="g"; break;
  91. case 104: $znak="h"; break;
  92. case 105: $znak="i"; break;
  93. case 106: $znak="j"; break;
  94. case 107: $znak="k"; break;
  95. case 108: $znak="l"; break;
  96. case 109: $znak="m"; break;
  97. case 110: $znak="n"; break;
  98. case 111: $znak="o"; break;
  99. case 112: $znak="p"; break;
  100. case 113: $znak="q"; break;
  101. case 114: $znak="r"; break;
  102. case 115: $znak="s"; break;
  103. case 116: $znak="t"; break;
  104. case 117: $znak="u"; break;
  105. case 118: $znak="v"; break;
  106. case 119: $znak="w"; break;
  107. case 120: $znak="x"; break;
  108. case 121: $znak="y"; break;
  109. case 122: $znak="z"; break;
  110. default: $znak=""; break;
  111. }
  112.  
  113.  
  114. $wyraz=$wyraz.$znak;
  115.  
  116. }
  117.  
  118. $text=strtolower($wyraz);
  119. $text=ucfirst($text);
  120.  
  121.  
  122. echo $text."<br>";
  123.  
  124.  
  125. //}
  126. ?>


Postanowiłem napisać generator imion (cóż, nie potrafiłem żadnego fajnego do gry wymyślić). Ma on działać w następujący sposób:
1. Użytkownik podaje ciąg znakowy
2. Ciąg jest "przerabiany", tj. każdy znak ciągu (litera) zmienia się na kolejne, występujące po nim znaki (litery), w zależności od pola "dodaj". Czyli podając w tym polu liczbę 1, z litery A zrobi się litera B.
3. Na podstawie tych liter powstaje wyraz, który ma być tym wygenerowanym imieniem.

Wszystko niby działa, lecz chciałbym, żeby była też możliwość podania, ile razy chce się obrobić w ten sposób ciąg, jednak for(), który umieściłem w komentarzach (bo nie działał), nie chce działać.

Czemu? Ma to jakiś związek z pętlą for() zagnieżdżoną w tej pętli for()? Jak to naprawić?
nospor
A czymże się objawia to niedziałanie?
Adiqus
A powinno działać?

Po prostu nie chce mi wykonać pętli określoną ilość razy. Raz wykonuje, niezależnie od wartości pola "ile" 1 raz, czasem 2, czasem w nieskończoność.
nospor
/*$i=(int)$_POST['ile'];

for($p=0; $p<$i; $p++) {*/

$i=strlen($text);

Warunkiem dla pętli jest $i ale już w samej pętli ty te $i zmieniasz.
Adiqus
Dzięki, pomogła zmiana $i na $y. A mam jeszcze takie pytanie:

Dlaczego jeśli w polu "text" wpisałem "A", w polu "dodaj" - "0", a w polu "ile" - "3", wyskoczyło mi:

  1. A
  2. Aa
  3. Aaaa


Zamiast:

  1. A
  2. A
  3. A


Przecież w pętli powinno się "A" zmienić w "A", a na koniec $text powinno mieć wartość "A" i zostać wypisane i tak 3 razy?

Pytanie trochę nie do tematu, ale jeśli mogę je zadać, to zadaję.

Z góry dzięki.

---
EDIT: Problem został rozwiązany. $wyraz nie był "wyzerowany" na początku pętli. Wystarczyło dodać na początku pierwszej pętli for()
  1. $wyraz="";


Dzięki jeszcze raz i CLOSE!
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.