2017-12-28 11 views
2

まず、私はこのPHPで計算のための配列を作成する方法?

===================================== 
| id | userid | item_id | rating | 
===================================== 
| 1 | 1 |  B  | 5 | 
| 2 | 1 |  C  | 4 | 
| 3 | 2 |  A  | 4 | 
| 4 | 2 |  C  | 3 | 
| 5 | 3 |  A  | 2 | 
| 5 | 3 |  B  | 2 | 
| 6 | 3 |  C  | 2 | 
===================================== 

ように私のデータベースに評価表を持ってそれから私は、テーブルから配列を作成し、配列を計算します。詳細については、これは私のコードです

<?php 
include './connect.php'; 
$userid = $_SESSION['ids']; 

$sql1 = "SELECT item_id, rating FROM rating WHERE userid='$userid' "; 
$result1 = $conn->query($sql1); 

$itemI = array(); 
$itemJ = array(); 
$items = array(); 

while($row1 = mysqli_fetch_assoc($result1)){ 
    $items[$row1["item_id"]] = $row1["item_id"]; 
    $itemI[$row1["item_id"]] = $row1["rating"]; 
    $itemJ[$row1["item_id"]] = $row1["rating"]; 

    $ditemI = $itemI[$row1["item_id"]]; 
    $ditemJ = $itemJ[$row1["item_id"]]; 
    $nume = 0; 
    $den1 = 0; 
    $den2 = 0; 
    $rs = 0; 

$sqlr = "SELECT AVG(rating) AS avgRatingUser FROM rating WHERE userid='$userid' "; 
      $resultr = $conn->query($sqlr); 
      $duser = array(); 
      while($rowr = mysqli_fetch_assoc($resultr)){ 
       $duser[$u]["avgRatingUser"] = $rowr["avgRatingUser"]; 
       $duserU = $duser[$u]["avgRatingUser"]; 
      } 

    for($i = 0; $i<count($itemI); $i++){ 
     for($j = $i+1; $j<count($itemI); $j++){ 

      $nume += (($itemI[$i] - $duser[$u]) * ($itemJ[$j] - $duser[$u])); 
      $den1 += (pow(($itemI[$i] - $duser[$u]), 2)); 
      $den2 += (pow(($itemJ[$j] - $duser[$u]), 2));   

     $squart = (sqrt($den1)) * (sqrt($den2)); 
     $rs += $nume/$squart; 
    } 
} 
} 

echo $nume. " "; 
echo $den1. " "; 
echo $den2. " "; 
echo $squart. " "; 
echo $rs. " "; 

私の質問は、なぜ配列計算の結果が表示されないのですか?

と私のコードのエラーはどこですか?

+0

あなたは変数の範囲をhttps://stackoverflow.com/questions/16959576/reference-what-is-variable-scope-which-variables-are-accessible-from-where-and –

+0

で学ぶ必要があります各ステップで値を印刷して、あなたが間違っていたことを知りました –

答えて

0

あなたの問題は、読み取りと書き込みの両方に間違ったインデックスを使用しているという事実に基づいています。 SELECT -ingデータの後の最初のループでは

、あなたは(結構です)次のコードを追加します。

$items[$row1["item_id"]] = $row1["item_id"]; 
$itemI[$row1["item_id"]] = $row1["rating"]; 
$itemJ[$row1["item_id"]] = $row1["rating"]; 

し、次のコードでは、あなたがこの(これも細かい)のようにそれを読む:

$nume += (($itemI[$i] - $duser[$u]) * ($itemJ[$j] - $duser[$u])); 
$den1 += (pow(($itemI[$i] - $duser[$u]), 2)); 
$den2 += (pow(($itemJ[$j] - $duser[$u]), 2)); 

問題は、あなたのテーブルの情報から、item_idA, B, C, ...であり、あなたがforループコードから取られた整数インデックスを使用することにより、後のコードで配列を読むことが知られている、です。配列に使用するインデックスの種類を決定する必要があります。

+0

あなたの答えに感謝 – user6496745

関連する問題