Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何根据我的需要在PHP中格式化数组?_Php_Mysql_Sql - Fatal编程技术网

如何根据我的需要在PHP中格式化数组?

如何根据我的需要在PHP中格式化数组?,php,mysql,sql,Php,Mysql,Sql,我有一个简单的目的地数据库 $sql=mysqli_query($con,"SELECT * FROM users,rating WHERE users.user_id=rating.user_id GROUP BY rating.user_id"); $output=array(); while($hsl=mysqli_fetch_array($sql)){ $str=$hsl['username']; $sql1=mysqli_query($con,"SELECT * FROM des

我有一个简单的目的地数据库

$sql=mysqli_query($con,"SELECT * FROM users,rating WHERE users.user_id=rating.user_id GROUP BY rating.user_id");

$output=array();
while($hsl=mysqli_fetch_array($sql)){

$str=$hsl['username'];

$sql1=mysqli_query($con,"SELECT * FROM destination,rating WHERE rating.dest_id=destination.dest_id AND rating.user_id='$hsl[user_id]'");

while($hsl1=mysqli_fetch_array($sql1)){
$user_id=$hsl1['user_id'];
$title=$hsl1['title'];
$rating1=$hsl1['1_rating'];
$rating2=$hsl1['2_rating'];
$rating3=$hsl1['3_rating'];
$rating4=$hsl1['4_rating'];
$avg=($rating1+$rating2+$rating3+$rating4) / 4;
$str1=$title;
$str2=$avg;
如何格式化数组以获得每个用户的结果,如下所示

$rekom =  array(
"user1" => array("Monumen Nasional" => 3.25, 
              "Kota Tua" => 3,
                "Tidung Island" => 2),

"user2" => array("Monumen Nasional" => 3.5, "Kota Tua" => 4.25,
                  "Tidung Island" => 2),

"user3" => array("Monumen Nasional" => 2.25, "Kota Tua" => 4.5,
                "Tidung Island" => 3.75),

"user4" => array("Monumen Nasional" => 2, "Kota Tua" => 4, "Tidung Island" => 4),

"user5" => array("Monumen Nasional" => 4.25, "Tidung Island" => 4)    
))

我已尝试此代码,但无法解析所有用户:

$rekom = array($str => array($title => $str2));

您可以使用
joins
获取所需的所有信息,这样您就可以有一个查询,而不是数据库中的1+个用户。如果您有很多用户,那么这将带来巨大的性能优势

下面我假设您将目的地名称保存在一列
标题
中,这些值为“user1”、“user2”。。。存储在
user\u id
列中。如果列名不同,请随意更改我的代码

$sql = "SELECT * FROM users 
        INNER JOIN rating ON users.user_id=rating.user_id
        INNER JOIN destination ON rating.dest_id = destination.dest_id";


$result = mysqli_query($con, $sql);

$reviews = [];

while($row = mysqli_fetch_array($result)) {

    $rating = ($row['1_rating'] + $row['2_rating'] + $row['3_rating'] + $row['4_rating']) / 4;
    $reviews[$row['user_id']][$row['title']] = $rating;
}

print_r($reviews);
这将为您提供所有有用户评论的目的地

编辑
您可以通过在
选择中添加
平均值(1\u评级+2\u评级+3\u评级+4\u评级)
来计算平均值。此外,您还应按目的地id、用户id添加
组,请阅读。使用with,而不是使用字符串连接生成查询。请参阅和,以获取一些好的示例。您的标题似乎与实际问题完全不同,请您改写您的标题好吗?@AlexHowansky谢谢您的参考资料。Script47感谢爱迪生先生的警告,您的代码运行良好,并生成所有用户评论。非常感谢……:)