Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]tabela z alfabetem
Forum PHP.pl > Forum > Przedszkole
shreker
witam potrzebuję zrobić tabelę z alfabetem (26x26 pól), ale z przesunięciem w każdym kolejnym rzędzie o 1 znak. poniżej doszedłem do tego momentu:
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
....
a potrzebuję uzyskać coś takiego:
abcdefghijklmnopqrstuvwxyz
bcdefghijklmnopqrstuvwxyza
cdefghijklmnopqrstuvwxyzab
...
  1. echo '<table>';
  2. for($i = 0; $i <= 26; $i++)
  3. {
  4. echo '<tr>';
  5. for($s = 97; $s <= 122; $s++)
  6. {
  7. echo '<td>'.chr($s).'</td>';
  8. }
  9. echo '</tr>';
  10. }
  11. echo '</table>';
nospor
Nie: chr($s)
a: chr($s+$i)

Problem przeskoku koncowki pozostawiam tobie.
trueblue
Środkowa pętla od 0 do 26.

Do $s dodajesz numer wiersza ($i), całość modulo 26 i dodajesz kod pierwszego znaku (97).


shreker
nospor w niczym mi to nie pomaga, równie dobrze mogę zrobić to tak:
  1. echo '<table>';
  2. $c = 0;
  3. for($i = 0; $i <= 26; $i++)
  4. {
  5. echo '<tr>';
  6. for($s = (97+$c); $s <= 122; $s++)
  7. {
  8. echo '<td>'.chr($s).'</td>';
  9. }
  10. echo '</tr>';
  11. $c++;
  12. }
  13. echo '</table>';

i też będę miał przesunięcie.
w przypadku twojej propozycji będę miał wypełnione "kolejnymi znakami", a zamierzonego efektu nie osiagnę.
"Problem przeskoku koncowki pozostawiam tobie." - gdybym wiedział jak to zrobić to bym nie pisał
nospor
Napisalem ci jak przesunac znaki, bo ewidentnie nie wiedziales. Czyli juz w polowie problem ci rozwiazalem. Jedyne co musisz zrobic to jeszcze rozwiazac problem ostatnich znakow by wracaly na poczatek. No wszystko w nocy mam za ciebie robic? tongue.gif
blahy
A ja bym do tego podszedl tak:
  1. <?php
  2.  
  3. $a[0] = range('a', 'z'); // wygeneruj pierwszy wiersz abc...z
  4.  
  5. for ($i = 1; $i<27; $i++) { // wygeneruj odpowiednia ilosc przesunietych wierszy - tutaj ostatni bedzie znowu taki jak pierwszy, czyli abc...z
  6. $row = $a[$i-1]; // skopiuj poprzedni wiersz
  7. $first = array_shift($row); // usun pierwszy znak
  8. $row[] = $first; // i daj go na koniec, czyli z abc...z zrob bcd...za
  9.  
  10. $a[$i] = $row; // dodaj nowy przesuniety wiersz do wyniku
  11. }
  12.  
  13. // wypisz
  14. foreach($a as $row) {
  15. foreach ($row as $char) {
  16. echo $char;
  17. }
  18. echo PHP_EOL;
  19. }


  1. abcdefghijklmnopqrstuvwxyz
  2. bcdefghijklmnopqrstuvwxyza
  3. cdefghijklmnopqrstuvwxyzab
  4. defghijklmnopqrstuvwxyzabc
  5. efghijklmnopqrstuvwxyzabcd
  6. fghijklmnopqrstuvwxyzabcde
  7. ghijklmnopqrstuvwxyzabcdef
  8. hijklmnopqrstuvwxyzabcdefg
  9. ijklmnopqrstuvwxyzabcdefgh
  10. jklmnopqrstuvwxyzabcdefghi
  11. klmnopqrstuvwxyzabcdefghij
  12. lmnopqrstuvwxyzabcdefghijk
  13. mnopqrstuvwxyzabcdefghijkl
  14. nopqrstuvwxyzabcdefghijklm
  15. opqrstuvwxyzabcdefghijklmn
  16. pqrstuvwxyzabcdefghijklmno
  17. qrstuvwxyzabcdefghijklmnop
  18. rstuvwxyzabcdefghijklmnopq
  19. stuvwxyzabcdefghijklmnopqr
  20. tuvwxyzabcdefghijklmnopqrs
  21. uvwxyzabcdefghijklmnopqrst
  22. vwxyzabcdefghijklmnopqrstu
  23. wxyzabcdefghijklmnopqrstuv
  24. xyzabcdefghijklmnopqrstuvw
  25. yzabcdefghijklmnopqrstuvwx
  26. zabcdefghijklmnopqrstuvwxy
  27. abcdefghijklmnopqrstuvwxyz


mozna tez nie tworzyc zmiennej $row, tylko uzyc bezposrednio nowego wiersza $a[$i] no i tez bardziej sprytnie zamieniac znaki pierwszy z ostatnim
shreker
dzięki blahy. faktycznie, nie pomyślałem żeby to zrobić na tablicach. w międzyczasie znalazłem rozwiązanie na zagranicznym forum, ale dzięki jeszcze raz. szybciej można liczyć na pomoc na innych forach, niż na rodzimych, smutne :-(
nospor
Cytat
szybciej można liczyć na pomoc na innych forach, niż na rodzimych, smutne :-(
Szybciej ci podziekuja na zagranicznym forum za udzielenie wskazowek a nie podanie gotowca, niz na rodzimym forum, smutne sad.gif No ale niestety plaga leni z podejsciem "mi sie nalezy" na rodzimym forum coraz wieksza... smutne x 2 sad.gif
trueblue
Chyba mam włączoną opcję niewidoczności postów dla innych, podobnie jak kiedyś Pyton_000.
Pyton_000
@trueblue Nie przejmuj się wink.gif Wspieram Cię duchowo biggrin.gif
nospor
@trueblue jakbys jeszcze nie zauwazyl, to nasz leniuszek oczekuje tylko podania gotowego kodu, a nie jego slownej interpretacji, wiec wiesz, zostales poprostu zignorowany jako post nie wart uwagi... takich czasow dozylismy, smutne.... biggrin.gif
abrakadabrax
Najprościej:
  1. $alphabet = range('a', 'z');
  2. $i = count($alphabet);
  3. echo '<table>';
  4. while($i--)
  5. {
  6. echo '<tr><td>';
  7. echo join('</td><td>', $alphabet);
  8. echo '</td></tr>';
  9. array_push($alphabet, array_shift($alphabet));
  10. }
  11. echo '</table>';

zamiast range mozesz dać własną tablicę, css we własnym zakresie :-)
shreker
dzięki wielkie :-)
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.