我一直在研究我的评分系统,并因此而来。我有4个变量。
$newscore
$score1
$score2
$score3
我想看看新的分数是否低于其他三个,如果是,是哪一个。评分系统要求你获得尽可能低的分数。
我有以下代码:
if($newscore > $score1){
if($newscore > $score2){
if($newscore < $score3){
//has to be score3 to replace.
}
}else{
...
}
}
但我想知道的是,我是否必须继续所有这些if语句,或者是否有更简短、更容易的语句?我需要替换它小于的分数,但不能替换它大于的分数。得分1、2和3是所有球员的统计数据。如果我必须继续使用所有的if语句,代码会是什么样子(这让我的逻辑感到困惑)?
您可能应该使用数组
$scores = array(8, 15, 10); //previous scores
$new_score = 5;
$new_score_smallest = true;
foreach($scores as $score) {
if($score < $new_score) {
$new_score_smallest = false;
}
}
if($new_score_smallest) {
echo "Best score!";
}
else {
echo "Not the best score :(";
}
如果你只想记住3个最好的分数:
$scores = array(5, 6, 8);
$new_score = 7;
for($i = 0; $i < count($scores); $i++) {
if($new_score < $scores[$i]) {
$scores[$i] = $new_score;
break;
}
}
您可以执行以下操作:
编辑:当你使用数据库时,你会执行类似于以下的查询:
SELECT scores FROM scores_table
将表名和列名替换为相应的数据。
$scores = [$score1, $score2] // add as many as you like
$new_score = $scores[0]; // assign a baseline
foreach ($scores as $score) {
if ($score < $new_score) {
$new_score = $score;
}
}
希望能有所帮助。
您可以使用array_search
和min
$newscore = 2;
$scores = array($score1, $score2, $score3);
if($newscore < min($scores)){
$scores[array_search(min($scores), $scores)] = $newscore;
}
如果$newscore
低于,则阵列$score
的最低分数将更新
把你的分数放在一个数组或任何可迭代的东西中(比如查询结果,无论你使用PDO还是mysqli)。
假设你的分数在$scores
数组中(例如,如果$score
是一个PDOStatement,它将是相同的)并排序(在查询中使用ORDER ASC
):
$scores = [105, 201, 305];
$newscore = '186';
$hiscore = false;
$beaten = [];
foreach ($score as $k => $score) {
if ($newscore > $score) {
$hiscore = true;
$beaten[] = $score;
unset($scores[$k]);
}
}
if ($hiscore) {
echo 'New high score!'.PHP_EOL;
echo 'Better than '.implode(', ', $beaten).PHP_EOL;
echo 'But not better than '.implode(', ', $scores);
} else {
echo 'Try harder!';
}
<?php
$newscore = 78;
$score1 = 23;
$score2 = 201;
$score3 = 107;
$max = max([$score1, $score2, $score3]);
if ($max < $newscore) {
echo "New best score ! ({$newscore})";
} else {
echo "Not the best score !'nCurrent: {$newscore}'nBest: {$max}";
}