Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Dodawanie elementow do tablicy - różne sposoby
Garreto
post 29.05.2012, 20:06:54
Post #1





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 29.05.2012

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


Witam, rozpoczełem nauke PHP z podręcznikiem PHP i MySQL - Tworzenie stron WWW - Vademecum profesjonalisty - wyd 3 (jestem w rozdziale 5 o Funkcjach)
Znalazłem gdzieś w internecie także zadanie o treści
//Napisa? funkcje dwuargumentow1, kt?rej argumentami bed1 liczby 3 cyfrowe i zadaniem funkcji jest: wyliczy? oredni1 tych liczb i mediane.
Zrobiłem je w taki niezbyt elegancki sposób
  1. function srmediana($liczba,$liczba1)
  2. {
  3. if ((strlen($liczba) && strlen($liczba1)) == 3 && is_numeric($liczba) && is_numeric($liczba1))
  4. {
  5. $srednia=($liczba+$liczba1)/2;
  6. echo $srednia."<br>";
  7. explode("",$liczba);
  8. explode("",$liczba1);
  9. [b] $tablica=array($liczba[0],$liczba[1],$liczba[2],$liczba1[0],$liczba1[1],$liczba1[2]);[/b]
  10. sort($tablica);
  11. $mediana=($tablica[2]+$tablica[3])/2;
  12. echo $mediana."<br>";
  13. }
  14. else
  15. {
  16. echo "To nie sa liczby trzycyfrowe";
  17. return;
  18. }
  19. }

Wytłuszczoną linijke próbowałem zapisac na pierdyliard różnych sposobów
np.
  1. for ($i=0;$i<6;$i++)
  2. {
  3. $tablica[]=$liczba[$i];
  4. $tablica[]=$liczba[$i];
  5. }

albo
  1. $zbior1=explode("",$liczba);
  2. $zbior2=explode("",$liczba1);
  3. $tablica=array($zbior1,$zbior2);

W koncu pomyslałem że explode zrobi tak że
  1. $liczba=array($liczba[0],$liczba[1],$liczba[2]);
  2. $liczba1=array($liczba1[0],$liczba1[1],$liczba1[2]);

i spróbowałem poprostu
  1. $tablica=array($liczba,$liczba1);

Jednak żaden z tych sposobów przy skrypcie
  1. <html>
  2. <head>
  3. <meta http-equiv="Content-type" content="text/html; charset=iso-8859-2">
  4. <meta http-equiv="Content-Language" content="pl">
  5. <meta name="Author" content="Seba">
  6. <title>Test funkcji</title></head>
  7. <form action="funkcjasrmediana.php" method="post">
  8. <input type="text" name=test>
  9. <input type="text" name=test1>
  10. <input type="submit" value="Wy?lij"></form>
  11. </html>
  12.  
  13. <?
  14. //Napisa? funkcje dwuargumentow1, kt?rej argumentami bed1 liczby 3 cyfrowe i zadaniem funkcji jest: wyliczy? oredni1 tych liczb i mediane.
  15. $test=$_POST['test'];
  16. $test1=$_POST['test1'];
  17.  
  18. function srmediana($liczba,$liczba1)
  19. {
  20. if ((strlen($liczba) && strlen($liczba1)) == 3 && is_numeric($liczba) && is_numeric($liczba1))
  21. {
  22. $srednia=($liczba+$liczba1)/2;
  23. echo $srednia."<br>";
  24. explode("",$liczba);
  25. explode("",$liczba1);
  26. $tablica=array($liczba[0],$liczba[1],$liczba[2],$liczba1[0],$liczba1[1],$liczba1[2]);
  27. sort($tablica);
  28. $mediana=($tablica[2]+$tablica[3])/2;
  29. echo $mediana."<br>";
  30. }
  31. else
  32. {
  33. echo "To nie sa liczby trzycyfrowe";
  34. return;
  35. }
  36. }
  37. echo srmediana($test,$test1);
  38.  
  39. ?>

Poprostu nie zadziałał. Moim pytaniem jest: Dlaczego ?

Ten post edytował Garreto 29.05.2012, 20:09:00
Go to the top of the page
+Quote Post
IProSoft
post 29.05.2012, 20:21:13
Post #2





Grupa: Zarejestrowani
Postów: 479
Pomógł: 97
Dołączył: 6.09.2011
Skąd: php.net :)

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


Podpowiedź:
  1. strlen($liczba) == 3 && strlen($liczba1) == 3
  2. .
  3. .
  4. .
  5. $liczba = str_split($liczba);
  6. $liczba1 = str_split($liczba1);


Ten post edytował IProSoft 29.05.2012, 20:21:56


--------------------
Manual prawdę Ci powie.
Go to the top of the page
+Quote Post
Garreto
post 29.05.2012, 20:28:48
Post #3





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 29.05.2012

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


przecież explode działa tak samo
pozatym twój sposób też nie działa, jedynie wpisanie każdej $liczba i $liczba1 działa

Ten post edytował Garreto 29.05.2012, 20:35:08
Go to the top of the page
+Quote Post
Crozin
post 29.05.2012, 20:35:58
Post #4





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


1. Liczby to nie tekst, więc nie próbuj ich używać w ten sposób. Liczba trzycyfrowa to liczba spełniająca następujący warunek: 100 ≤ n ≤ 999 i tak też powinieneś ją sprawdzać. Liczenie długości tekstu reprezentującego je i is_numeric jest raczej słabe, bo przepuści Ci przykładowo "1.2", a ta liczba nie spełnia Twoich kryteriów.
2. Medianą dwóch liczb będzie nic innego jak ich średnia arytmetyczna. Jak już to tutaj szukasz mediany cyfr występujących w tych liczbach.
3. Co do pierwszej odpowiedzi - popatrz na sposób zapisu warunku.

Ten post edytował Crozin 29.05.2012, 20:37:39
Go to the top of the page
+Quote Post
IProSoft
post 29.05.2012, 20:37:05
Post #5





Grupa: Zarejestrowani
Postów: 479
Pomógł: 97
Dołączył: 6.09.2011
Skąd: php.net :)

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


Wrzuć sobie error_reporting(E_ALL); na początku skryptu php.

a to prosto z manuala PHP:
Cytat
If delimiter is an empty string (""), explode() will return FALSE


--------------------
Manual prawdę Ci powie.
Go to the top of the page
+Quote Post
Garreto
post 29.05.2012, 21:16:04
Post #6





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 29.05.2012

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


A powie mi ktoś czemu sposoby ktore podałem w pierwszym poście nie działają ?
W końcu przebudowałem skrypt tak:
  1. function srmediana($liczba,$liczba1)
  2. {
  3. settype($liczba,"integer");
  4. settype($liczba1,"integer");
  5. if (strlen($liczba) == 3 && strlen($liczba1) == 3 && is_int($liczba) && is_int($liczba1))
  6. {
  7. $srednia=($liczba+$liczba1)/2;
  8. echo $srednia."<br>";
  9. $liczba = str_split($liczba);
  10. $liczba1 = str_split($liczba1);
  11. $tablica=array_merge($liczba,$liczba1);
  12. sort($tablica);
  13. $mediana=($tablica[2]+$tablica[3])/2;
  14. echo $mediana."<br>";
  15. }
  16. else
  17. {
  18. echo "To nie sa liczby trzycyfrowe";
  19. return;
  20. }
  21. }
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: 19.07.2025 - 15:06