Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Jak zastąpić 20 if'ów?
Forum PHP.pl > Forum > Przedszkole
czernin
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?
Turson
do usunięcia
Crozin
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.
werdan
  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.
YourFrog
@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.
PrinceOfPersia
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";


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.