Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] wstawianie danych do tablicy
coco
post 21.10.2009, 22:08:59
Post #1





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 17.10.2009

Ostrzeżenie: (0%)
-----


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...
Go to the top of the page
+Quote Post
JoShiMa
post 21.10.2009, 22:17:26
Post #2





Grupa: Zarejestrowani
Postów: 1 374
Pomógł: 149
Dołączył: 1.03.2006

Ostrzeżenie: (0%)
-----


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.


--------------------
Go to the top of the page
+Quote Post
maly_swd
post 21.10.2009, 22:18:08
Post #3





Grupa: Zarejestrowani
Postów: 744
Pomógł: 118
Dołączył: 14.02.2009
Skąd: poziome

Ostrzeżenie: (0%)
-----


podaj przyklad danych i jak tabica ma wygladac.
Tak, da sie


--------------------
śmieszne obrazki
Kryzys: Ser jem spleśniały, wino piję stare i samochód mam bez dachu..
Go to the top of the page
+Quote Post
thek
post 21.10.2009, 23:41:58
Post #4





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




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.


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
coco
post 22.10.2009, 08:48:46
Post #5





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 17.10.2009

Ostrzeżenie: (0%)
-----


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 ...

Ten post edytował coco 22.10.2009, 08:52:32
Go to the top of the page
+Quote Post
JoShiMa
post 22.10.2009, 09:02:06
Post #6





Grupa: Zarejestrowani
Postów: 1 374
Pomógł: 149
Dołączył: 1.03.2006

Ostrzeżenie: (0%)
-----


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. }


--------------------
Go to the top of the page
+Quote Post
coco
post 22.10.2009, 11:01:20
Post #7





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 17.10.2009

Ostrzeżenie: (0%)
-----


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ć?

Ten post edytował coco 22.10.2009, 11:02:24
Go to the top of the page
+Quote Post
JoShiMa
post 22.10.2009, 11:37:39
Post #8





Grupa: Zarejestrowani
Postów: 1 374
Pomógł: 149
Dołączył: 1.03.2006

Ostrzeżenie: (0%)
-----


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.


--------------------
Go to the top of the page
+Quote Post
coco
post 22.10.2009, 12:04:52
Post #9





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 17.10.2009

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
JoShiMa
post 22.10.2009, 13:16:48
Post #10





Grupa: Zarejestrowani
Postów: 1 374
Pomógł: 149
Dołączył: 1.03.2006

Ostrzeżenie: (0%)
-----


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.  


--------------------
Go to the top of the page
+Quote Post
coco
post 22.10.2009, 14:33:06
Post #11





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 17.10.2009

Ostrzeżenie: (0%)
-----


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).
Go to the top of the page
+Quote Post
JoShiMa
post 22.10.2009, 18:19:46
Post #12





Grupa: Zarejestrowani
Postów: 1 374
Pomógł: 149
Dołączył: 1.03.2006

Ostrzeżenie: (0%)
-----


No tak ten kawałek powinien być przed podwójną pętlą tworzącą formularz.


--------------------
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 30.06.2025 - 11:09