2017-12-28 5 views
2

Zuerst habe ich Frankiertabelle in meiner Datenbank wie dieserWie erstellt man ein Array für die Berechnung in 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 | 
===================================== 

Dann möchte ich ein Array aus der Tabelle erstellen, und das Array zu berechnen. Für weitere Details, das ist mein Code

<?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. " "; 

dann ist meine Frage, warum das Ergebnis der Feldberechnung zeigt nicht?

und wo ist der Fehler meines Codes?

+0

Sie müssen den Umfang der Variablen in https://stackoverflow.com/questions/16959576/reference-what-isvariable-scope-which-variables-are-accessible-from-where- und –

+0

versuchen zu lernen Drucken Sie den Wert in jedem Schritt und Sie erfahren, wo Sie schief gelaufen sind –

Antwort

0

Ihr Problem dreht sich um die Tatsache, dass Sie einen falschen Index zum Lesen und Schreiben verwenden.

In der ersten Schleife nach SELECT -ing Daten, fügen Sie den folgenden Code (was in Ordnung ist):

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

Und in dem nächsten Codes, können Sie es wie folgt zu lesen (was auch in Ordnung):

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

Das Problem ist, aus Ihrer Tabelle Informationen, ist es bekannt, dass item_id ist A, B, C, ... und lesen Sie das Array in dem späteren Codes durch integer-Index von for Schleife Code genommen werden. Sie müssen entscheiden, welche Art von Index Sie für Ihr Array verwenden möchten.

+0

danke für Ihre Antwort – user6496745

Verwandte Themen