我来帮您写一个PHP脚本来统计两个或多个用户中谁的冲刺跑次数更多。

<?php
/**
* 冲刺跑次数统计比较器
* 支持比较多个用户的冲刺跑次数
*/
class SprintStats {
private $userStats = [];
/**
* 添加用户冲刺跑数据
* @param string $userName 用户名
* @param int $sprintCount 冲刺跑次数
*/
public function addUserSprint($userName, $sprintCount) {
if (!is_int($sprintCount) || $sprintCount < 0) {
throw new InvalidArgumentException("冲刺跑次数必须是大于等于0的整数");
}
$this->userStats[$userName] = $sprintCount;
}
/**
* 获取统计数据
* @return array 排序后的统计数据
*/
public function getStatistics() {
if (empty($this->userStats)) {
return ['error' => '暂无数据'];
}
// 按次数降序排序
arsort($this->userStats);
$result = [
'ranking' => [],
'winner' => null,
'maxCount' => 0
];
// 填充排名数据
foreach ($this->userStats as $user => $count) {
$result['ranking'][] = [
'username' => $user,
'sprint_count' => $count
];
// 找出最大次数
if ($count > $result['maxCount']) {
$result['maxCount'] = $count;
$result['winner'] = $user;
}
// 如果有并列第一
if ($count == $result['maxCount'] && $result['winner'] !== $user) {
$result['tied'] = true;
}
}
return $result;
}
/**
* 快速比较两个用户
*/
public static function compareTwo($userA, $countA, $userB, $countB) {
$stats = new self();
$stats->addUserSprint($userA, $countA);
$stats->addUserSprint($userB, $countB);
return $stats->getStatistics();
}
}
// ==================== 使用示例 ====================
// 示例1: 比较两个用户
echo "=== 两人比较示例 ===\n";
$result = SprintStats::compareTwo('小明', 15, '小红', 12);
$winner = $result['winner'];
$rankings = $result['ranking'];
echo "比较结果:\n";
foreach ($rankings as $rank => $person) {
$medal = $rank == 0 ? "🥇" : ($rank == 1 ? "🥈" : "🥉");
echo " $medal {$person['username']}: {$person['sprint_count']}次\n";
}
echo "最终胜者: $winner\n\n";
// 示例2: 比较三个用户
echo "=== 三人比较示例 ===\n";
$stats = new SprintStats();
$stats->addUserSprint('张三', 20);
$stats->addUserSprint('李四', 25);
$stats->addUserSprint('王五', 18);
$result2 = $stats->getStatistics();
echo "排名结果:\n";
foreach ($result2['ranking'] as $rank => $person) {
$medal = $rank == 0 ? "🥇" : ($rank == 1 ? "🥈" : "🥉");
echo " $medal {$person['username']}: {$person['sprint_count']}次\n";
}
echo "冲刺王: {$result2['winner']} 共{$result2['maxCount']}次\n\n";
// 示例3: 从数据库查询比较
echo "=== 数据库查询示例(模拟)===\n";
function compareFromDatabase($pdo, $userId1, $userId2) {
// 模拟数据库查询
$query = "SELECT user_id, COUNT(*) as sprint_count
FROM sprint_records
WHERE user_id IN (?, ?)
GROUP BY user_id
ORDER BY sprint_count DESC";
// 这里简化模拟数据
$mockData = [
['user_id' => 1, 'username' => '用户A', 'sprint_count' => 30],
['user_id' => 2, 'username' => '用户B', 'sprint_count' => 28],
];
$stats = new SprintStats();
foreach ($mockData as $row) {
$stats->addUserSprint($row['username'], $row['sprint_count']);
}
return $stats->getStatistics();
}
// 示例4: 完全动态比较
echo "=== 动态添加数据比较 ===\n";
$stats = new SprintStats();
$users = [
'Runner1' => 8,
'Runner2' => 12,
'Runner3' => 35,
'Runner4' => 12,
'Runner5' => 24,
];
foreach ($users as $name => $count) {
$stats->addUserSprint($name, $count);
}
$result3 = $stats->getStatistics();
echo "总的冲刺跑排行榜:\n";
foreach ($result3['ranking'] as $rank => $person) {
echo " #".($rank+1)." {$person['username']}: {$person['sprint_count']}次\n";
}
echo "最勤奋的跑者: {$result3['winner']}\n";
// 检查是否有并列
if (isset($result3['tied']) && $result3['tied']) {
echo "⚠️ 存在并列第一的情况!\n";
$max = $result3['maxCount'];
$tiedUsers = array_filter($result3['ranking'], function($item) use ($max) {
return $item['sprint_count'] == $max;
});
echo "并列的选手:";
$names = array_column($tiedUsers, 'username');
echo implode(', ', $names) . "\n";
}
// ==================== 带命令行交互的版本 ====================
/**
* 命令行版本:输入姓名和次数直接比较
*/
function cliCompare() {
echo "请输入第一个人的姓名: ";
$name1 = trim(fgets(STDIN));
echo "请输入 {$name1} 的冲刺跑次数: ";
$count1 = (int)trim(fgets(STDIN));
echo "请输入第二个人的姓名: ";
$name2 = trim(fgets(STDIN));
echo "请输入 {$name2} 的冲刺跑次数: ";
$count2 = (int)trim(fgets(STDIN));
$result = SprintStats::compareTwo($name1, $count1, $name2, $count2);
echo "\n=== 比较结果 ===\n";
if ($count1 > $count2) {
echo "🏆 {$name1} 的冲刺跑次数({$count1}次)比 {$name2}({$count2}次)更多!\n";
} elseif ($count2 > $count1) {
echo "🏆 {$name2} 的冲刺跑次数({$count2}次)比 {$name1}({$count1}次)更多!\n";
} else {
echo "🤝 双方打平!都是{$count1}次!\n";
}
}
// 取消下面的注释来运行命令行交互版本
// cliCompare();
// ==================== Web输出版本 ====================
/**
* HTML表格输出版本
*/
function generateHtmlTable() {
$stats = new SprintStats();
$stats->addUserSprint('小明', 45);
$stats->addUserSprint('小红', 38);
$stats->addUserSprint('小刚', 52);
$stats->addUserSprint('小李', 45);
$result = $stats->getStatistics();
$html = '<!DOCTYPE html>
<html>
<head>
<style>
table { border-collapse: collapse; width: 100%; }
th, td { border: 1px solid #ddd; padding: 8px; text-align: center; }
th { background-color: #f2f2f2; }
.winner { background-color: #ffd700; font-weight: bold; }
</style>
</head>
<body>';
$html .= "<h2>🏃 冲刺跑排行榜</h2>";
$html .= "<table>";
$html .= "<tr><th>排名</th><th>姓名</th><th>冲刺次数</th></tr>";
foreach ($result['ranking'] as $rank => $person) {
$class = isset($person['username']) && $person['username'] == $result['winner'] ? 'winner' : '';
$html .= "<tr class='$class'>";
$html .= "<td>#".($rank+1)."</td>";
$html .= "<td>{$person['username']}</td>";
$html .= "<td>{$person['sprint_count']} 次</td>";
$html .= "</tr>";
}
$html .= "</table>";
$html .= "<h3>🏆 冲刺王: {$result['winner']}</h3>";
$html .= '</body></html>';
return $html;
}
// 取消下面的注释来输出HTML表格
// echo generateHtmlTable();
?>
主要功能说明:
基础比较功能
compareTwo($userA, $countA, $userB, $countB)- 快速比较两个人
多用户比较
addUserSprint($userName, $sprintCount)- 添加多个用户的冲刺数据getStatistics()- 获取完整的排名统计
特色功能
- 支持并列情况的检测
- 自动排序显示排名
- 清晰的输出格式(CLI和HTML两种模式)
使用场景
- 直接比较:快速查看A和B谁的冲刺次数多
- 排行榜:多个用户之间的排名比较
- 数据库集成:可以从数据库查询后进行比较
扩展建议
如果要对接数据库,可以这样使用:
// 数据库版本示例
function compareFromDB($pdo) {
$stmt = $pdo->query("
SELECT u.name, COUNT(s.id) as sprint_count
FROM users u
LEFT JOIN sprint_records s ON u.id = s.user_id
GROUP BY u.id
ORDER BY sprint_count DESC
");
$stats = new SprintStats();
while ($row = $stmt->fetch()) {
$stats->addUserSprint($row['name'], $row['sprint_count']);
}
return $stats->getStatistics();
}
您可以根据实际需求选择合适的使用方式!
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播