Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Pętla for
Forum PHP.pl > Forum > Przedszkole
kropamk
Witam,

mam pętle for w której przechowuje zmienną. Za każdym wywołaniem pętli chciałbym ją zwiększyć (ilość pętli) o tę wartość przechowywaną w pętli. Pokażę kod wink.gif

  1. <?php
  2. if (isset($nowa_wartosc)) {
  3. $wartosc = $nowa_wartosc;
  4. } else {
  5. $wartosc = 2;
  6. }
  7.  
  8. for ($i = $wartosc; $i <5; $i++) {
  9.  
  10. if(isset($_GET['value'])){
  11. $nowa_wartosc = 1 + $wartosc;
  12. echo 'wartosc równa = '.$nowa_wartosc.'</br>';
  13. } else {
  14. echo 'Wartosc bez zmian';
  15. }
  16. }
  17. ?>


Czyli jeżeli w pętli będzie zmienna $nowa_wartosc to chciałbym ją dodać do pętli for ale nie mogę zrobić tego w taki sposób.

Jest taka możliwość ?

[Edit]
Chodzi o to, że jeżeli np. wyślę sobie getem wartość (nie zawszę będzie ona wysłana) to wtedy pętla zwiększa swoją ilość ile razy się wykona a wartość ze zmienna $nowa_wartosc

Pozdrawiam.
com
Nie wiem czy to ta godzina, ale Cie nie rozumiem smile.gif
klima06
Strasznie niejasno to wytłumaczyłeś. Chodzi Ci o to, żeby pętla zwiększała swoją ilość wykonań o wartość z $_GET['value'] ?
  1. $val = (isset($_GET['value'])) ? $_GET['value'] : 0;
  2. for ($i = 0; $i < (5+$val); $i++) {
  3.  
  4. }


@up
Dobrze wiedzieć, że nie tylko ja nie mogę tego zrozumieć smile.gif
kropamk
Drodzy forumowicze smile.gif

wiem, że dość nietypowy ten problem ale słuchajcie chodzi o to że np.

w portfelu mam 10 zł i obstawiam jakiś zakład (mecz),
zakład kosztuje 3 zł,
w pętli for przepuszczam tyle razy zakład ile mam kasy w portfelu,
no ale jestem fuksiarzem i wygralem dwa razy co jest rowne 2 * 10 zł = 20 zł,
do mojego portfela doszło 20 zł i chciałbym je wykorzystać znowu w postawieniu zakładu,
czyli musiałbym do pętli for dożycić moją wygraną, prawda ? dlatego chciałem zwiększyć wartość wykonania się pętli o tyle ile wygrałem z zakładów tak aby pętla zrobiła ze mnie bankruta ze stanem 0 zł w portfelu wink.gif

coś takiego
  1. <?php
  2. if (isset($aktualny_portfel)) {
  3. $portfel = $aktualny_portfel;
  4. } else {
  5. $portfel = 10;
  6. }
  7.  
  8. $koszt_losowania = 2;
  9.  
  10. // pętla losowania
  11. for ($losowanie = $portfel; $losowanie > $koszt_losowania; $losowanie-=$koszt_losowania) {
  12. $aktualny_portfel = $portfel + 10;
  13. }
  14. ?>
Greg0
Przepuszczasz zakład 3 razy bo 3x3=9 < 10 czyli warunek spełniony, więc dlaczego gdy wygrywasz mnożysz 2x10? a nie 2x9 lub nawet nie 2x(2x3) co jest bardziej logiczne? Nie znam się na zakładach ale coś chyba źle rozumujesz.
kropamk
zakład dajmy, że kosztuje 3 zł ale wygrana jednego zakładu to zysk 10 zł, czyli wygrasz 3 zakłady to wygrywasz 30 zł

pętla polega na tym, że patrzy ile mam w portfelu i losuje mi tyle zakładów na ile mnie stać a że między czasie mogę coś wygrać to chciałbym aby to było dodawane do pętli.
Greg0
Więc musisz zrobić pętlę for odliczającą portfel - zaklad aż do zera, i dla przypadku wygranej dodającą do portfela wygraną przez co się będzie wykonywać dłużej.
Taki pseudo kod:
Kod
for(i=portfel;i>=0;i-=cena_zakladu)
{
  if(zaklad_wygrany) {
   i += wygrana;
  }
}
com
coś takiego?

http://ideone.com/vfjxni
jackussa
Moja propozycja z "losowaniem"
Możesz ustawić kwotę początkową, maksymalną ilość gier. W metodzie haveIWin domyślnie ustawiłem 25% szans na wygraną

  1. <?php
  2.  
  3. if (isset($_GET['start']))
  4. {
  5. $initMoney = $_GET['start'];
  6. }
  7. else
  8. {
  9. $initMoney = 10;
  10. }
  11. $maxPlays = 5;
  12.  
  13. /////// gramy
  14.  
  15. $bookie = new bookie($initMoney, $maxPlays);
  16. $bookie->play();
  17.  
  18. ///////
  19.  
  20. class bookie
  21. {
  22. const BET_VALUE = 3;
  23. const WIN_VALUE = 10;
  24.  
  25. private $actualMoney;
  26. private $maxPlays;
  27.  
  28. public function __construct($initMoney, $maxPlays)
  29. {
  30. $this->actualMoney = $initMoney;
  31. $this->maxPlays = $maxPlays;
  32. echo 'Kwota poczatkowa: ' . $this->actualMoney . ' zl <br/>';
  33. }
  34.  
  35. public function play()
  36. {
  37. $haveIWin = false;
  38. $maxBids = $this->getMaxBids();
  39. for($i=1; $i<=$maxBids; $i++)
  40. {
  41. if($this->maxPlays > 0)
  42. {
  43. $haveIWin = $this->bid();
  44. echo '<br/>';
  45. if($haveIWin)
  46. {
  47. break;
  48. }
  49. }
  50. }
  51.  
  52. if($haveIWin)
  53. {
  54. $this->play();
  55. }
  56. }
  57.  
  58. private function getMaxBids()
  59. {
  60. return floor($this->actualMoney/self::BET_VALUE);
  61. }
  62.  
  63. private function bid()
  64. {
  65. echo 'Zawieram zaklad <br/>';
  66. $this->actualMoney -= self::BET_VALUE;
  67. $this->maxPlays--;
  68. if($this->haveIWin())
  69. {
  70. echo 'wygrales ' . self::WIN_VALUE . 'zl <br/>';
  71. $this->actualMoney += self::WIN_VALUE;
  72. $result = true;
  73. }
  74. else
  75. {
  76. echo 'nie udalo sie <br/>';
  77. $result = false;
  78. }
  79. $this->printActualMoney();
  80. return $result;
  81. }
  82.  
  83. private function printActualMoney()
  84. {
  85. echo 'aktualny stan portfela: ' . $this->actualMoney . ' zl <br/>';
  86. }
  87.  
  88. private function haveIWin($chance = 25)
  89. {
  90. return (rand(1,100) <= $chance);
  91. }
  92. }
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.