Na wstępie napiszę kilka słów, aby uniknąć wszelkich wątpliwości: Nie mam na celu propagowania spożywania alkoholu. Ciekawił mnie jedynie sposób, w jaki działają wszelakie wirtualne alkomaty, które można napotkać w internecie, dlatego stworzyłem tę funkcję smile.gif.

Funkcja zwraca tablicę, w której jest określona zawartość alkoholu we krwi w danej godzinie, gdzie klucz jest godziną, a wartość elementu tablicy - liczbą promili. W trakcie tworzenia funkcji posiłkowałem się Wikipedią.
Funkcja daje jedynie pewien zarys sytuacji, gdyż preferencje i predyspozycje organizmu każdego człowieka są inne.
Można stworzyć nową funkcję z wykorzystaniem poniższej, w której wartości elementów zwracanych tablic mogą być sumowane. Wtedy można stworzyć alkomat, w którym będą uwzględniane różne typy alkoholu o różnym jego stężeniu procentowym. Może kiedyś to tutaj dodam, jak napiszę.

Funkcja:

  1. <?php
  2.  
  3. /**
  4.  * funkcja pozwalająca obliczyć zawartość alkoholu we krwi (w promilach) w danym przedziale czasowym
  5.  * @param string $plec płeć człowieka, który spożył alkohol (k/m)
  6.  * @param int $waga waga człowieka, który spożył alkohol (w kilogramach)
  7.  * @param string $zoladek żołądek człowieka, który spożył alkohol (pusty/pelny)
  8.  * @param int $godzina godzina rozpoczęcia picia alkoholu <0;23>
  9.  * @param int $procenty procentowa zawartość alkoholu w trunku <0;1>
  10.  * @param int $ilosc ilość trunku (w mililitrach)
  11.  * @return array $tablicaPromili
  12.  */
  13. function alkomat($plec,$waga,$zoladek,$godzina,$procenty,$ilosc)
  14. {
  15.  
  16. $gestoscEtanolu = 0.8; // g/cm3
  17.  
  18. // ilość wypitego czystego alkoholu w gramach
  19.  
  20. $a = $ilosc * $procenty * $gestoscEtanolu;
  21.  
  22. // współczynnik zależny od płci człowieka
  23.  
  24. if($plec == 'k')
  25. {
  26. $k = 0.6;
  27. }
  28. elseif($plec == 'm')
  29. {
  30. $k = 0.7;
  31. }
  32.  
  33. /* po spożyciu alkoholu na czczo, 
  34.  szczytowe stężenie alkoholu w organizmie pojawia się po ~1 godzinie,
  35.  natomiast u osoby pijącej "na pełny żołądek" po ~2 godzinach */
  36.  
  37. if($zoladek == 'pelny')
  38. {
  39. $godzina++;
  40. }
  41.  
  42. // liczba promili alkoholu we krwi
  43.  
  44. $p = $a / ($k * $waga);
  45.  
  46. $tablicaPromili = array();
  47.  
  48. while(round($p,2) >= 0.09)
  49. {
  50. if($godzina <= 22)
  51. {
  52. $godzina++;
  53. }
  54. else
  55. {
  56. $godzina = 0;
  57. }
  58.  
  59. $tablicaPromili[$godzina] = round($p,2);
  60. $p -= 0.12; // średnia szybkość rozkładu alkoholu u człowieka, to 12 gram na godzinę
  61. }
  62.  
  63. return $tablicaPromili;
  64.  
  65. }
  66.  
  67. ?>


Przykład użycia:

  1. <?php
  2.  
  3. $promile = alkomat('m','65','pelny','21','0.4','320');
  4.  
  5. print '<pre>';
  6. print_r($promile);
  7. print '</pre>';
  8.  
  9. ?>