我正在尝试在 php 中创建一个用于集成评级系统的小类,但我遇到了一个可能很简单的问题。我想显示 0 到 5 之间的评分,但投票可以在任何区间内,例如 1 到 10 或 1 到 12。例如,如果投票区间为 1-12,总分/总票数为 6,我想实际上显示 2.5 我目前正在使用这个
$rating = number_format(round(($total_score/$total_votes)*2)/2,1);
那么我怎样才能让它只显示 0-5 区间的值呢?
$fromminrate = 1;
$frommaxrate = 12;
$tominrate = 0;
$tomaxrate = 5;
$rating = $tominrate + (
((($total_score/$total_votes)-$fromminrate)
/ ($frommaxrate-$fromminrate))
* ($tomaxrate-$tominrate));
使用这样的简单百分比计算:
<?php
$number_of_votes = 10; // real votes
$max_number_of_votes = 12; // vote range
$max_display_votes = 5; // display range
$perc = $max_display_votes * $number_of_votes / $max_number_of_votes;
$display = intval(round($perc)); // optional, round and convert to int
echo $display;
由于投票范围 - 就其性质而言 - 从零开始,您不必担心下边界并且可以简化您的计算。;)
解释:
$number_of_votes(10) 与 $max_number_of_votes(12) 相关,因为所讨论的值 ($display) 与 $max_display_votes (5) 相关。在数学中:
$number_of_votes / $max_number_of_votes == $display / $max_display_votes;
或在示例中:
10 / 12 = $display / 5;
您可以通过乘以 5 来转换此项:
10 * 5 / 12 = $display;
这就是我的“公式”;)