Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: wypełnianie tablicy w pętli
Forum PHP.pl > Forum > PHP
wojtektorr
Witam, jestem początkującym i proszę o wyrozumiałość. Mam problem z wypełnieniem tablicy jednowymiarowej o rozmiarze i=43 kolejnymi liczbami 1,2,3 ... 43. Dodatkowo przy załadowaniu ponownie strony wartości mają sie przesówać w lewo a pierwszy wyraz na koniec, taki wąż zjadający swoją doope. Poniżej kawałek funkcji która nie działa do końca dobrze (pewnie błąd w konstrukcji pętli for), poproszę o poprawkę.
  1. if (file_exists("counter.txt")) {
  2. $file=fopen("counter.txt","r");
  3. $licznik=chop(fgets($file,100));
  4. if ($licznik>42) $licznik=0;
  5. $licznik++;
  6. fclose($file);
  7. $file=fopen("counter.txt","w");
  8. fwrite($file,$licznik);
  9. fclose($file);
  10. }
  11. else {
  12. $file=fopen("counter.txt","w");
  13. fwrite($file,$licznik);
  14. fclose($file);
  15. }
  16.  
  17. for ($i=1;$i<44;$i++) {
  18. if ($licznik>43) $licznik=1;
  19. $liczba[$i-1]=$i+$licznik;
  20. if ($liczba[$i-1]>43) {
  21. $liczba[$i-1]=$licznik-1;
  22. }
  23. }
  24.  
_Borys_
Stworzenie tablicy z przedziałem elementów
  1. $licznik = range(1, 43);

Przesuwanie z początku na koniec
<----
---->
  1. array_push($licznik,array_shift($licznik));
wojtektorr
Nie bardzo wiem jak to zastosować, proszę o dalszą pomoc.
_Borys_
Dałem odpowiedź na twoje pytania
Cytat
Mam problem z wypełnieniem tablicy jednowymiarowej o rozmiarze i=43 kolejnymi liczbami 1,2,3 ... 43

Odp.
  1. $licznik = range(1, 43);

Cytat
Dodatkowo przy załadowaniu ponownie strony wartości mają sie przesówać w lewo a pierwszy wyraz na koniec, taki wąż zjadający swoją doope.

Odp.
  1. array_push($licznik,array_shift($licznik));

Powiedz co chcesz osiągnąć to pomożemy.
wojtektorr
Odnoszę się nadal do tego mojego kawałka kodu, to jak wypełnic tablice to wiem i wykonałem to pętlą for ale jak ta petle poprawić aby była taka rotacja wartosci w tej tablicy? Nie wiem w którym mijescu zastosować ta procedure array_shift. Moge prosić o konkretny kawałek kodu realizujący taka rotację z użyciem fora?
Fifi209
Z opisu śmiem twierdzić, że kolega chce zrobić bufor cykliczny

Czyli tablica powinna mieć rozmiar n+1
wojtektorr
No coś takiego jak bufor cykliczny, mój kod realizuje to co na obrazku przy kazdym kolejnym odswiezeniu strony co prawda wpisuje liczbe na ogon węża ale... (na obrazku powinno byc widać w czym problem). http://s21.postimg.org/xyrp44wo7/tab.jpg
Fifi209
Tutaj masz bardzo prosty bufor cykliczny:
  1. <?php
  2.  
  3. $w_pointer = 0;
  4. $r_pointer = 0;
  5. $buffer = array();
  6.  
  7. function add($data, &$wp, &$arr)
  8. {
  9. $arr[$wp] = $data;
  10. $wp = ($wp == 3) ? 0 : ++$wp;
  11. }
  12.  
  13. function read(&$rp, &$arr)
  14. {
  15. $temp = $arr[$rp];
  16. $rp = ($rp == 3) ? 0 : ++$rp;
  17. return $temp;
  18. }
  19.  
  20. $buff_temp = array();
  21.  
  22. add('Test', $w_pointer, $buffer);
  23. $buff_temp[] = $buffer;
  24.  
  25. add('Test2', $w_pointer, $buffer);
  26. $buff_temp[] = $buffer;
  27.  
  28. add('Test3', $w_pointer, $buffer);
  29. $buff_temp[] = $buffer;
  30.  
  31. add('Test4', $w_pointer, $buffer);
  32. $buff_temp[] = $buffer;
  33.  
  34. add('Test5', $w_pointer, $buffer);
  35. $buff_temp[] = $buffer;
  36.  
  37. add('Test6', $w_pointer, $buffer);
  38. $buff_temp[] = $buffer;
  39.  
  40. echo '<pre>';
  41. print_r($buff_temp);
  42. echo '</pre>';
  43.  
  44. echo '<hr>';
  45.  
  46. echo read($r_pointer, $buffer).'<br/>';
  47. echo read($r_pointer, $buffer).'<br/>';
  48. echo read($r_pointer, $buffer).'<br/>';
  49. echo read($r_pointer, $buffer).'<br/>';
  50. echo read($r_pointer, $buffer).'<br/>';
  51.  
  52. ?>


Napisałem go dla Ciebie, przy okazji pokazując jak działa.
wojtektorr
Dzięki, ale szczerze powiedziawszy to spodziewałem się prostrzego rozwiązania :/ Dzięki jeszcze raz.
Fifi209
Nie patrz na ilość kodu, bo 80% jest tylko po to, aby pokazać że działa smile.gif
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.