Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] wstawianie danych do tablicy
Forum PHP.pl > Forum > PHP
coco
Muszę wstawić dane z tablicy jednowymiarowej do wielowymiarowej, przy czym nie jest znana z góry długość tej pierwszej, jest to dopiero wpisywane w formularz przez użytkownika. Ta długość tablicy jednowymiarowej może być kwadratem liczby, czyli: 1, 4, 9, 16...
a tablica wielowymiarowa ma wyglądać odpowiednio: 1x1, 2x2, 3x3, 4x4. Czy da się to w ogóle zrobić?
Każda pomoc się przyda...
JoShiMa
Jeśli tablica ma długość 1, 4, 9 itd to wykorzystaj funkcję sqrt(). Będziesz wiedział jaki ma być wymiar tej tablicy kwadratowej. Wypełnisz ją za pomocą dwóch zagnieżdżonych pętli. Jak dokładnie to Ci nie podpowiem póki się nie dowiem jaka jest konstrukcja formularza a ściślej mówiąc wpadających z niego danych.
maly_swd
podaj przyklad danych i jak tabica ma wygladac.
Tak, da sie
thek
Wielkość tablicy jednowymiarowej potraktuj sqrt a wynik zaokrąglij w górę. To da Ci ilośc wierszy i kolumn macierzy wynikowej. Teraz tylko w pętli zagnieżdżonej pętli for wypełniać ją elementami wektora. Problemem może być sytuacja gdy macierz ma więcej pól niż ma ich wektor startowy. Przykładowo 19-elementowa tablica daje nam macierz wynikową 5x5, ale wchodzi do niej tylko 19 pól wektora. Albo resztę uzupełniasz zerami, albo już na starcie wypełniasz całość zerami, a potem dopiero wpisujesz wektor.
coco
Cytat(JoShiMa @ 21.10.2009, 23:17:26 ) *
Jeśli tablica ma długość 1, 4, 9 itd to wykorzystaj funkcję sqrt(). Będziesz wiedział jaki ma być wymiar tej tablicy kwadratowej. Wypełnisz ją za pomocą dwóch zagnieżdżonych pętli. Jak dokładnie to Ci nie podpowiem póki się nie dowiem jaka jest konstrukcja formularza a ściślej mówiąc wpadających z niego danych.

Dane w formularzu pobierane są ze zmiennej tablicowej. Formularz jest taki:
  1. echo "<form action='nazwa.php' method='post'>";
  2. for($k=0; $k<$wym; $k++)
  3. {
  4. for($l=0; $l<$wym; $l++)
  5. {
  6. echo "<input name='pole[]' type=\"text\" value=\"a$k,$l\" size='3'/>";
  7.  
  8. }
  9. echo "<br>";
  10. }

Chodzi w zadaniu o to, że użytkownik podaje wymiar macierzy, wyskakuje mu wtedy odpowiednia ilość okienek, tam wpisuje dane no i potem ma być jeszcze liczony wyznacznik, stąd te dane muszą trafiać do tablicy. Mam już zrobione z tym że podaje wymiar i że wskakują okienka, ale nie wiem właśnie jak zrzucić to do tablicy ...
JoShiMa
No to taką samą pętlą musisz wrzucić do tablicy

  1. $i = 0;
  2. for($k=0; $k<$wym; $k++){
  3. for($l=0; $l<$wym; $l++){
  4. $tablica[$k][$l] = $_POST['pole'][$i];
  5. $i ++;
  6. }
  7. }
coco
Cytat(JoShiMa @ 22.10.2009, 10:02:06 ) *
No to taką samą pętlą musisz wrzucić do tablicy

  1. $i = 0;
  2. for($k=0; $k<$wym; $k++){
  3. for($l=0; $l<$wym; $l++){
  4. $tablica[$k][$l] = $_POST['pole'][$i];
  5. $i ++;
  6. }
  7. }


Dziękuję za pomoc. Mam:
  1. <?
  2. echo "<form action='mmm.php' method='post'>
  3. wymiar macierzy: <input type='text' name='wymiar' value='' size=2>";
  4. $wym=$_POST['wymiar'];
  5. $pole=Array();
  6. echo "<br>";
  7. for($k=0; $k<$wym; $k++)
  8. {
  9. for($l=0; $l<$wym; $l++)
  10. {
  11. echo "<input name='pole[]' type=\"text\" value=\"a$k,$l\"/>";
  12.  
  13. }
  14. echo "<br>";
  15. }
  16. echo "<br><input type='submit' value='wyslij'></form>";
  17. $i = 0;
  18. $tablica=Array();
  19. for($k=0; $k<$wym; $k++){
  20. for($l=0; $l<$wym; $l++){
  21. $tablica[$k][$l] = $_POST['pole'][$i];
  22. $i ++;
  23. }
  24. }
  25. print_r($tablica);
  26. ?>

i działa tzn.wrzuca do tablicy. Tylko mam błąd w samej komunikacji: muszę 2 razy z rzędu wpisać ten sam wymiar w formularz i wtedy dopiero jest dobrze, bo po pierwszym kliknięciu trzyma jeszcze stare dane, a wrzuca już do nowej tablicy. Jak to naprawić?
JoShiMa
No bo masz formularz i obróbkę w jednym pliku, bez żadnych warunków. trzeba sprawdzić, czy są w tablicy superglobalnej $_POST, twoje dane z formularza. Jeśli tak to zrobić obróbkę, jeśli nie to wyświetlić formularz. Można też najpierw zrobić obróbkę, jeśli są dane a po d spodem wyświetlenie formularza. Czyli w odwrotnej kolejności niż u Ciebie.
coco
Cytat(JoShiMa @ 22.10.2009, 12:37:39 ) *
No bo masz formularz i obróbkę w jednym pliku, bez żadnych warunków. trzeba sprawdzić, czy są w tablicy superglobalnej $_POST, twoje dane z formularza. Jeśli tak to zrobić obróbkę, jeśli nie to wyświetlić formularz. Można też najpierw zrobić obróbkę, jeśli są dane a po d spodem wyświetlenie formularza. Czyli w odwrotnej kolejności niż u Ciebie.


a mogę prosić o jakiś przykład jak to zrobić, choćby taki zarys, bo szczerze mówiąc dalej nie bardzo wiem co i jak.
JoShiMa
Ja bym to zrobiła tak:

  1. if( isset($_POST['pole']) ){
  2. $i = 0;
  3. for($k=0; $k<$wym; $k++){
  4. for($l=0; $l<$wym; $l++){
  5. $tablica[$k][$l] = $_POST['pole'][$i];
  6. $i ++;
  7. }
  8. }
  9. }else{
  10. for($k=0; $k<$wym; $k++){
  11. for($l=0; $l<$wym; $l++){
  12. echo "<input name='pole[]' type=\"text\" value=\"a$k,$l\"/>";
  13. }
  14. echo "<br>";
  15. }
  16. echo "<br><input type='submit' value='wyslij'></form>";
  17. }


albo

  1. if( isset($_POST['pole']) ){
  2. $i = 0;
  3. for($k=0; $k<$wym; $k++){
  4. for($l=0; $l<$wym; $l++){
  5. $tablica[$k][$l] = $_POST['pole'][$i];
  6. $i ++;
  7. }
  8. }
  9. }
  10.  
  11. for($k=0; $k<$wym; $k++){
  12. for($l=0; $l<$wym; $l++){
  13. echo "<input name='pole[]' type=\"text\" value=\"a$k,$l\"/>";
  14. }
  15. echo "<br>";
  16. }
  17. echo "<br><input type='submit' value='wyslij'></form>";
  18.  
coco
Cytat(JoShiMa @ 22.10.2009, 14:16:48 ) *
Ja bym to zrobiła tak:

  1. if( isset($_POST['pole']) ){
  2. $i = 0;
  3. for($k=0; $k<$wym; $k++){
  4. for($l=0; $l<$wym; $l++){
  5. $tablica[$k][$l] = $_POST['pole'][$i];
  6. $i ++;
  7. }
  8. }
  9. }else{
  10. for($k=0; $k<$wym; $k++){
  11. for($l=0; $l<$wym; $l++){
  12. echo "<input name='pole[]' type=\"text\" value=\"a$k,$l\"/>";
  13. }
  14. echo "<br>";
  15. }
  16. echo "<br><input type='submit' value='wyslij'></form>";
  17. }


albo

  1. if( isset($_POST['pole']) ){
  2. $i = 0;
  3. for($k=0; $k<$wym; $k++){
  4. for($l=0; $l<$wym; $l++){
  5. $tablica[$k][$l] = $_POST['pole'][$i];
  6. $i ++;
  7. }
  8. }
  9. }
  10.  
  11. for($k=0; $k<$wym; $k++){
  12. for($l=0; $l<$wym; $l++){
  13. echo "<input name='pole[]' type=\"text\" value=\"a$k,$l\"/>";
  14. }
  15. echo "<br>";
  16. }
  17. echo "<br><input type='submit' value='wyslij'></form>";
  18.  

Wstyd się przyznać, ale dalej mi wychodzi nie tak jak ma być (zapewne źle te części składam). Może to przez to, że to:
  1. echo "<form action='wyznacznik7.php' method='post'>
  2. wymiar macierzy: <input type='text' name='wymiar' value='' size=2>";
  3. $wym=$_POST['wymiar'];

daję w złym miejscu? (na samym początku).
JoShiMa
No tak ten kawałek powinien być przed podwójną pętlą tworzącą formularz.
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.