如何在 php 中创建用于计算的数组?
how to create an array for calculation in php?
首先,我的数据库中有 评分 table
=====================================
| 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 |
=====================================
然后我想从table创建一个数组,并计算这个数组。有关详细信息,这是我的代码
<?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. " ";
那么我的问题是,为什么数组计算的结果没有显示?
我的代码哪里出错了?
你的问题围绕着你使用了错误的索引来读取和写入。
在 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));
问题是,根据你的table信息,可知item_id
是A, B, C, ...
,你在后面的代码中使用取自[=的整数索引读取数组15=]循环代码。您需要决定要为数组使用哪种索引。
首先,我的数据库中有 评分 table
=====================================
| 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 |
=====================================
然后我想从table创建一个数组,并计算这个数组。有关详细信息,这是我的代码
<?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. " ";
那么我的问题是,为什么数组计算的结果没有显示?
我的代码哪里出错了?
你的问题围绕着你使用了错误的索引来读取和写入。
在 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));
问题是,根据你的table信息,可知item_id
是A, B, C, ...
,你在后面的代码中使用取自[=的整数索引读取数组15=]循环代码。您需要决定要为数组使用哪种索引。