2014-01-07 66 views
-1

感謝很多隊友! 現在我已經得到了另一個錯誤:警告:被零除 這是代碼的其餘部分:php - 由0

while($i<$n_utenti) 
{ 
    $query3 = $mysqli->query("SELECT * FROM valutazione WHERE email='$lista_utenti[$i]'"); 
    $indice=0; 
    while($row = mysqli_fetch_array($query3)) //acquisisco le votazioni dell'utente considerato per il confronto 
    { 
     $album_utente_confronto[$indice]=$row['id_album']; 
     $voti_utente_confronto[$indice]=$row['voto']; 
     $indice++; 
    } 
    //trovo gli album che sono stati valutati da entrambi gli utenti 
    $indice=0; 
    $n_album_loggato=count($album_utente_loggato); 
    $n_album_confronto=count($album_utente_confronto); 
    $ind=0; 
    for($indice=0;$indice<$n_album_loggato; $indice++) 
    { 
     $index=0; 
     while($index<$n_album_confronto) 
     { 
      if($album_utente_loggato[$indice]==$album_utente_confronto[$index]) 
      { 
       $album_comuni[$ind]=$album_utente_loggato[$indice]; 
       $ind++; 
      } 
      $index++; 
     } 
    } 
    //mi trovo i voti relativi agli album comuni per l'utente loggato 
    $n_album_comuni = count($album_comuni); 
    $indice=0; 
    $i_comuni=0; 
    for($indice=0;$indice<$n_album_comuni; $indice++) 
    { 
     $index=0; 
     $trovato=false; 
     while($index<$n_album_loggato && $trovato==false) 
     { 
      if($album_comuni[$indice]==$album_utente_loggato[$index]) 
      { 
       $voti_comuni_logged[$i_comuni] = $voti_utente_loggato[$index]; 
       $trovato = true; 
       $i_comuni++; 
      } 
      else 
      { 
       $index++; 
      }    
     }   
    } 
    //mi trovo i voti relativi agli album comuni per l'utente confrontato 
    $indice=0; 
    $i_comuni=0; 
    for($indice=0;$indice<$n_album_comuni; $indice++) 
    { 
     $index=0; 
     $trovato=false; 
     while($index<$n_album_confronto && $trovato==false) 
     { 
      if($album_comuni[$indice]==$album_utente_confronto[$index]) 
      { 
       $voti_comuni_confronto[$i_comuni] = $voti_utente_confronto[$index]; 
       $trovato = true; 
       $i_comuni++; 
      } 
      else 
      { 
       $index++; 
      }    
     }   
    } 


    $correlation[$i] = Correlation($voti_comuni_logged, $voti_comuni_confronto); 


    $i++;//chiusura while 
} 

//Displaying the calculated Correlation: 
print $correlation[0]; 




} 


//The functions that work behind the scene to calculate the 
//correlation 

function Correlation($arr1, $arr2) 
{   
$correlation = 0; 

$k = SumProductMeanDeviation($arr1, $arr2); 
$ssmd1 = SumSquareMeanDeviation($arr1); 
$ssmd2 = SumSquareMeanDeviation($arr2); 

$product = $ssmd1 * $ssmd2; 

$res = sqrt($product); 

$correlation = $k/$res; 

return $correlation; 
} 

function SumProductMeanDeviation($arr1, $arr2) 
{ 
$sum = 0; 

$num = count($arr1); 

for($i=0; $i<$num; $i++) 
{ 
    $sum = $sum + ProductMeanDeviation($arr1, $arr2, $i); 
} 

return $sum; 
} 

function ProductMeanDeviation($arr1, $arr2, $item) 
{ 
return (MeanDeviation($arr1, $item) * MeanDeviation($arr2, $item)); 
} 

function SumSquareMeanDeviation($arr) 
{ 
$sum = 0; 

$num = count($arr); 

for($i=0; $i<$num; $i++) 
{ 
    $sum = $sum + SquareMeanDeviation($arr, $i); 
} 

return $sum; 
} 

function SquareMeanDeviation($arr, $item) 
{ 
return MeanDeviation($arr, $item) * MeanDeviation($arr, $item); 
} 

function SumMeanDeviation($arr) 
{ 
$sum = 0; 

$num = count($arr); 

for($i=0; $i<$num; $i++) 
{ 
    $sum = $sum + MeanDeviation($arr, $i); 
} 

return $sum; 
} 

function MeanDeviation($arr, $item) 
{ 
$average = Average($arr); 

return $arr[$item] - $average; 
}  

function Average($arr) 
{ 
$sum = Sum($arr); 
$num = count($arr); 

return $sum/$num; 
} 

function Sum($arr) 
{ 
return array_sum($arr); 
} 

錯誤是在功能的關係,在此行中: $相關= $ K/$ RES ; 爲什麼它給我錯誤? 我建議立即進行刪除具有值0和1之間

+0

如果$ _SESSION ['Mail']來自用戶輸入,請注意SQL注入。 – lorenz

回答

2

你應該改變這樣的:

while($i<=$n_utenti) 

要這樣:

while($i<$n_utenti) 

$n_utenti是一個比記錄$lista_utenti的次數多。

,否則這將是清潔劑使用

foreach($lista_uteni as $email){ 

基於循環。 (你可以通過這種方式逐步淘汰一個臨時變量。)

+0

非常感謝!我編輯了第一篇文章,發現了一個新錯誤,你可以在那裏看看嗎? – Nicola

+0

通常這不是一個好的做法,改變問題的重點在這個網站...否則不知何故,你的$ res似乎爲零。你應該調試你的變量。也許一些印刷可以幫助。 –

+0

謝謝,我已經改變了數據庫中的值,現在標準偏差不是0 – Nicola