Проверка PHP на равенство в голосовании, переменное количество победителей

Я провел выборы с разным количеством победителей для каждой категории. (В одной категории может быть 3 победителя, другой 1 победитель, еще 2 победителя и т. Д.)

В настоящее время я показываю результаты, как это:

foreach($newarray as $key => $value){

                echo $key . $value . “<br>”;
}

Это возвращает

    Barack Obama 100
    Mitt Romney 100
    John Smith 94
    Jane Smith 85

Что мне нужно сделать, это сделать что-то эхо, если два значения совпадают на основе этого заранее определенного числа. Итак, если бы заранее определенное число было равно единице, оно показало бы это:

    Barack Obama 100 tie
    Mitt Romney 100 tie
    John Smith 94
    Jane Smith 85

Если бы заданное число было два, это показало бы это, так как второе и третье значения не совпадают:

    Barack Obama 100 winner
    Mitt Romney 100 winner
    John Smith 94
    Jane Smith 85

Спасибо за ваше время.

1 ответ

$max = max($array);
$tie = count(array_keys($array,$max)) > $predeterminedNumber;
foreach($newarray as $key => $value){
     echo $key . $value . ($value==$max ? ($tie ? ' tie' :' winner') : ''). '<br>';
}

Хотя все становится немного сложнее, если вам нужно, чтобы 3 победителя не обязательно имели одинаковое количество очков:

$predefinedNumber = whatever;
arsort($array);

//first $predefinedNumber are either winners or tied.
$winners = array_slice($array,0,$predefinedNumber,true);

//the next entry determines whether we have ties
$next = array_slice($array,$predefinedNumber,1,true);

//active tie on entries with this value
$nextvalue = reset($next);

//the above 2 statements would be equivalent to (take your pick):
//$values = array_values($array);
//$nextvalue = $values[$predefinedNumber];


foreach($array as $key => $value){
   echo $key.' '.$value;
   if($value == $nextvalue){
     echo ' tie';
   } else if(isset($winners[$key])){
     echo ' winner';
   }
   echo '<br>';
}
Другие вопросы по тегам