Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Dodawanie elementow do tablicy - różne sposoby
Forum PHP.pl > Forum > Przedszkole
Garreto
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 ?
IProSoft
Podpowiedź:
  1. strlen($liczba) == 3 && strlen($liczba1) == 3
  2. .
  3. .
  4. .
  5. $liczba = str_split($liczba);
  6. $liczba1 = str_split($liczba1);
Garreto
przecież explode działa tak samo
pozatym twój sposób też nie działa, jedynie wpisanie każdej $liczba i $liczba1 działa
Crozin
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.
IProSoft
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
Garreto
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. }
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.