2014-02-19 60 views
1

我在計算php中的標準偏差時遇到了問題。但它產生了錯誤的結果。PHP中的錯誤標準偏差結果

例如我得到的結果是(4 + 4 + 4 + 4 + 4 + 4)= 1.40而不是0.

請幫忙。

function std_dev ($attr, $test1,$test2,$test3,$test4,$test5,$test6) { 
    //$items = array($test1->$attr,$test2->$attr,$test3->$attr,$test4->$attr,$test5->$attr,$test6->$attr); 
    $items[] = array(); 

    if (isset($test1) && $test1->$attr != 9 && $test1->$attr != 0) { 
     $items[] = $test1->$attr; 
    } 
    if (isset($test2) && $test2->$attr != 9 && $test2->$attr != 0) { 
     $items[] = $test2->$attr; 
    } 
    if (isset($test3) && $test3->$attr != 9 && $test3->$attr != 0) { 
     $items[] = $test3->$attr; 
    } 
    if (isset($test4) && $test4->$attr != 9 && $test4->$attr != 0) { 
     $items[] = $test4->$attr; 
    } 
    if (isset($test5) && $test5->$attr != 9 && $test5->$attr != 0) { 
     $items[] = $test5->$attr; 
    } 
    if (isset($test6) && $test6->$attr != 9 && $test6->$attr != 0) { 
     $items[] = $test6->$attr; 
    } 

    $sample_square[] = array(); 
    $item_count = count($items); 
    for ($current = 1; $item_count > $current; ++$current) $sample_square[$current] = pow($items[$current], 2); 

    $standard_deviation = sqrt(array_sum($sample_square)/$item_count - pow((array_sum($items)/$item_count), 2)); 

    return round($standard_deviation,2); 

} 
+1

你做了什麼來調試你的代碼? –

+0

沒有人從來沒有學過它。我會在今天之後嘗試學習它。 –

回答

1
$items = array(); 

$sample_square = array(); 

沒有[]當你定義的變量數組。

for ($current = 0; $item_count > $current; ++$current) 

開始從沒有如果要遍歷所有元素(否則你會在索引0錯過項)


想知道這是..

if (isset($test1) && $test1->$attr != 9 && $test1->$attr != 0) { 
    $items[] = $test1->$attr; 
} 

以及如何將輸入值傳遞給函數。這也可能導致錯誤的結果...

+0

刪除方括號並將當前值改爲0。刪除方括號給出不同結果的原因是什麼? –

+0

@Paolo我猜if語句只是插入數組中的所有值。它只是檢查值是否存在,並且它們與9和0不同。值只是對象testX的一個屬性,並且函數正在接收所有測試作爲參數 – Alberto

+0

當您編寫$ a [] = xyz時,您將xyz按數組$ a的結尾。所以當你寫$ a [] -as $ a還沒有定義時,你可以將它定義爲一個數組。當你寫$ a [] = array()時,你使$ a成爲一個數組,並將其賦值爲第一個值(另一個)爲空數組。 – Paolo