2012-02-15 26 views
1

我正在嘗試使用PHP來完成藥物半生命計算器。我想通過MG中每天服用的藥物量,並通過半衰期,然後計算在X時間之後剩下多少藥物以及之前的劑量還剩多少。在PHP中獲得之前陣列密鑰的值

到目前爲止,這是我...

function calcHalfLife($mgTaken , $drugHalfLifeHours , $day = 1) { 
    //total number of half-lifes elapsed 
    $total_half_lifes = ($day * 24)/$drugHalfLifeHours; 
    //total reduction in dosage 
    $reductionFactor = pow(0.5 , $total_half_lifes); 
    //return the current dosage in the person's system 
    return round($mgTaken * $reductionFactor , 8); 
} 

然後我工作的這個功能,下面這將讓我過去所採取的每一天日和MG的數組,函數應該然後遍歷數組並在每天的值上運行上面的函數。

function HalfLifeChart(array $days, $drugHalfLifeHours) { 
    $out = array(); 
    foreach ($days as $day => $dosage) { 
     $out[$day] = calcHalfLife($dosage , $drugHalfLifeHours , 1); 
    } 
    return $out; 
} 

用法示例...

$day = array(1 => 30, 
      2 => 0, 
      3 => 0, 
      4 => 40, 
      5 => 30, 
      6 => 10, 
      7 => 60); 

echo '<br><pre>'; 
print_r(HalfLifeChart($day, 4.5)); 
echo '</pre><br><br>'; 

現在我有一個不錯的開始,但在HalfLifeChart功能是我需要做更多的工作,現在它可以運行在半壽命計算每天傳遞的數字是好的,但我需要從前一天獲得結果並將其添加到當天獲得的MG,然後在該數字上運行計算。因此,例如,如果我前一天離開了0.8043mg,並且我今天服用了30mg,那麼計算應該在0.8043 + 30上運行,然後通過我的半條命計算器函數傳遞該結果。

我不知道如何抓住前一天的結果,但請幫忙嗎?

+1

我不知道我的理解完全你的代碼,但不能使用'$天[$ K-1]'? – bfavaretto 2012-02-15 18:01:20

+0

變量。設置一個變量。這很容易! – 2012-02-15 18:01:52

+0

@bfavaretto我以爲會的工作,但它給了我一些抵消錯誤 – JasonDavis 2012-02-15 18:01:53

回答

1
function HalfLifeChart(array $days, $drugHalfLifeHours) { 
    $out=array(); 
    $remains=0; 
    foreach ($days as $day => $dosage) { 
    $total=$remains+$dosage; 
    $out[$day]=$total; 
    $remains=calcHalfLife($total , $drugHalfLifeHours , 1); 
    } 
    return $out; 
} 

給你

print_r(HalfLifeChart($day, 4.5)); 
Array 
(
    [1] => 30 
    [2] => 0.74409424 
    [3] => 0.01845587 
    [4] => 40.00045776 
    [5] => 30.99213701 
    [6] => 10.76870236 
    [7] => 60.26709765 
) 
+0

這工作完美,我嘗試了很多不同的事實和這實際上返回我正在尋找的數字 – JasonDavis 2012-02-15 18:22:38

+0

我有1個無關的問題,也許你可以幫助,在傳入的數組,如果我改變到'$ day = array(0 => 30, \t \t \t 1 => 0, \t \t \t 2 => 0, \t \t \t 3 => 0, \t \t \t 4 => 0, \t \t \t 5 => 10, \t \t \t 6 => 60);'然後我開始變得怪異的東西,像'1.1353977E-5'返回與我的電話號碼的信,我不知道,甚至看什麼對於這個問題 – JasonDavis 2012-02-15 18:25:34

+0

'1.1353977E-5'是PHPs編寫0.00001353977的方式,它是編寫小數字的一種非常常見的方式。你可以使用'echo number_format($ out [$ day],7)'作爲人類可讀的輸出 – 2012-02-15 18:38:46

2

爲什麼不把前一天的結果存儲在另一個變量中?

喜歡的東西:

function HalfLifeChart(array $days, $drugHalfLifeHours) { 
    $out = array(); 
    $prevDay = 0; 
    foreach ($days as $k => $v) { 
     $out[$k] = calcHalfLife($v , $drugHalfLifeHours , 1); //change this 
     $prevDay = $out[$k]; 
    } 
    return $out; 
} 
+0

好主意,生病嘗試 – JasonDavis 2012-02-15 18:03:20

1

只是存儲。

function HalfLifeChart(array $days, $drugHalfLifeHours) { 
    $out = array(); 
    $yesterday = 0; 
    foreach ($days as $k => $v) { 
     $out[$k] = calcHalfLife($v + $yesterday, $drugHalfLifeHours, 1); 
     $yesterday = $out[$k]; 
    } 
    return $out; 
}