2017-12-28 15 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