Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Jak zastąpić 20 if'ów?
czernin
post
Post #1





Grupa: Zarejestrowani
Postów: 62
Pomógł: 0
Dołączył: 14.06.2012

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


Kod:

  1. if($pyt1 == 2) { $punkty++; }
  2. if($pyt2 == 4) { $punkty++; }
  3. if($pyt3 == 1) { $punkty++; }
  4. if($pyt4 == 4) { $punkty++; }
  5. if($pyt5 == 2) { $punkty++; }
  6. if($pyt6 == 3) { $punkty++; }
  7. if($pyt7 == 2) { $punkty++; }
  8. if($pyt8 == 4) { $punkty++; }
  9. if($pyt9 == 3) { $punkty++; }
  10. if($pyt10 == 4) { $punkty++; }
  11. if($pyt11 == 1) { $punkty++; }
  12. if($pyt12 == 5) { $punkty++; }
  13. if($pyt13 == 5) { $punkty++; }
  14. if($pyt14 == 4) { $punkty++; }
  15. if($pyt15 == 2) { $punkty++; }
  16. if($pyt16 == 4) { $punkty++; }
  17. if($pyt17 == 4) { $punkty++; }
  18. if($pyt18 == 3) { $punkty++; }
  19. if($pyt19 == 4) { $punkty++; }
  20. if($pyt20 == 1) { $punkty++; }


Czy można zapisać ten kod inaczej, krócej, niż używając 20 if'ów?
Go to the top of the page
+Quote Post
Turson
post
Post #2





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


do usunięcia

Ten post edytował Turson 15.01.2014, 14:59:43
Go to the top of the page
+Quote Post
Crozin
post
Post #3





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

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


1. Zamiast 20 zmiennych powinieneś mieć tablicę.
2. Porównania z prawej strony również możesz wrzucić do tablicy.
3. Później możesz skorzystać z prostej pętli, która sprawdzi po kolei te pytania.
Go to the top of the page
+Quote Post
werdan
post
Post #4





Grupa: Zarejestrowani
Postów: 354
Pomógł: 100
Dołączył: 14.11.2013
Skąd: Płock

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


  1. <?php
  2. $answers = array(2, 4, 1, 4, 2, 3, 2, 4, 3, 4, 1, 5, 5, 4, 2, 4, 4, 3, 4, 1);
  3. for($i=0; $i<20;$i++){
  4. if(${"pyt" . $i+1} == $answers[$i]){
  5. $punkty++;
  6. }
  7. }
  8.  


Moze nie działac, bo z palca.

Ten post edytował werdan 15.01.2014, 15:22:25
Go to the top of the page
+Quote Post
YourFrog
post
Post #5





Grupa: Zarejestrowani
Postów: 124
Pomógł: 22
Dołączył: 10.01.2014

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


@werdan
Trzeba było mu tego nie pisać bo wklei zadziała i uzna że ma dobrze napisany kod. Crozin ma 100% racji autor powinien użyć tablicy nie faktu że php jest językiem dynamicznie wykonywanym i używać "magi"

@Topic
  1. <?php
  2.  
  3. $correctAnswer = array(2, 4, 1, 4, 2, 3, 2, 4, 3, 4, 1, 5, 5, 4, 2, 4, 4, 3, 4, 1);
  4. $userAnswer = array(2, 4, 1, 4, 2, 3, 2, 4, 3, 4, 1, 5, 5, 4, 2, 4, 4, 3, 4, 1);
  5.  
  6.  
  7. /**
  8.  * Zwraca ilość takich samych pól w tabelach (bierze pod uwagę kolejność indexów)
  9.  * @param Array $corrctArray Tabela przykładowa (do niej porównujemy)
  10.  * @param Array $userArray Tabela od użytkownika
  11.  */
  12. function getPointFromAnswer(Array $correctArray, Array $userArray)
  13. {
  14. $countCorrectArray = count($correctArray);
  15.  
  16. if( $countCorrectArray != count($userArray) )
  17. throw new \InvalidArgumentException('Tablice posiadają różne elementy');
  18.  
  19. $pkt = 0;
  20. for($i = 0; $i < $countCorrectArray; $i++)
  21. if( $correctArray[$i] === $userArray[$i] )
  22. $pkt++;
  23.  
  24. return $pkt;
  25. }
  26.  
  27. var_dump( getPointFromAnswer($correctAnswer, $userAnswer) );


W kodzie dałem "===" ponieważ chciałem być pewny że mi jakimś cudem int'a z tablicą nie sprawdzi.

Ten post edytował YourFrog 15.01.2014, 19:25:16
Go to the top of the page
+Quote Post
PrinceOfPersia
post
Post #6





Grupa: Zarejestrowani
Postów: 717
Pomógł: 120
Dołączył: 18.04.2009

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


albo tak:
wyliczasz część wspólną 2 tablic, za pomocą funkcji array_intersect_assoc, a później patrzysz ile elementów ma częśc wspólna. I tyle.

  1.  
  2. // 20 elementow
  3. $correctAnswer = array(2, 4, 1, 4, 2, 3, 2, 4, 3, 4, 1, 5, 5, 4, 2, 4, 4, 3, 4, 1);
  4. $userAnswer = array(2, 4, 1, 4, 2, 3, 10000/*bledna odp*/, 4, 2039/*bledna odp*/, 4, 1, 5, 5, 4, 2, 4, 4, 3, 4, 1);
  5.  
  6. $points = count(array_intersect_assoc($userAnswer, $correctAnswer));
  7. echo "Masz $points poprawnych odpowiedzi";


Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 22.08.2025 - 11:45