检查变量是否小于其他变量,以及它小于哪个变量.PHP


Check if Variable is smaller than others, and which one its smaller than. PHP

我一直在研究我的评分系统,并因此而来。我有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_searchmin

$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}";
}