Проверка 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>';
}