如何在php中创建用于计算的数组?

如何在php中创建用于计算的数组?,php,arrays,cosine-similarity,Php,Arrays,Cosine Similarity,首先,我的数据库中有这样的评级表 ===================================== | id | userid | item_id | rating | ===================================== | 1 | 1 | B | 5 | | 2 | 1 | C | 4 | | 3 | 2 | A | 4 | | 4

首先,我的数据库中有这样的评级表

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

您的问题围绕着这样一个事实:您对读和写都使用了错误的索引

选择
-ing data之后的第一个循环中,添加以下代码(可以):

在接下来的代码中,您可以这样读(这也很好):


问题是,从表信息可知,
item_id
A、B、C、
,您可以使用取自
循环代码的整数索引来读取后面代码中的数组。您需要决定要为数组使用哪种索引。

您必须了解变量的范围,尝试打印每个步骤中的值,然后您就可以知道哪里出错了谢谢您的回答
$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));