投票結果を投票数が多い順に並べ替えて表示したい
以下の関数を実行すると、上から投票数が多い順に
(例)
1.13.1.14: 8回
5.11.5.12: 3回
2.13.3.14: 1回
(1.13.1.14の部分が投票内容)
といった感じで表示されるはずなんですが、たぶんソートの部分が間違ってて一番大きい投票結果が並び続けてしまいます。
(例)
1.13.1.14: 8回
1.13.1.14: 8回
1.13.1.14: 8回
教えてくれる方いたらよろしくおねがします。
追記
"投票内容"の中身は数値。今回は18になっています。
"投票ボタンが押された回数"の中身は、
(実際)
3.19.8.13
2.19.8.13
3.19.8.13
3.19.8.13
3.19.8.13
2.19.8.13
2.19.8.13
2.19.8.13
2.19.8.13
2.19.8.13
2.19.8.13
2.19.8.13
2.19.8.13
2.19.8.13
2.19.8.13
2.19.8.13
2.19.7.13
2.19.7.13
となっています。理想では、show_votes()を実行すると、
(実際)
2.19.8.13:12回
3.19.8.13:4回
2.19.7.13:2回
と画面に表示されます。
function show_votes(){
//数えたい。
$vote_sofar = file("投票内容");
$times_vote = file_get_contents("投票ボタンが押された回数");
$int_times_vote = intval($times_vote);
$vote_sofar_num = array();
$maximum=0;
for ($b=0 ; $b<$int_times_vote ; $b++){
$number=0;
$flag=0;
if($b!=0){
for ($c=$b-1 ; $c>=0 ; $c--){//前に重複があるならスキップして次のループへ。
if($vote_sofar[$c] == $vote_sofar[$b]){
$flag=1;
}
}
}
if($flag == 1){
$vote_sofar_num[$b] = -1;
continue;
}
for ($a=0 ; $a<$int_times_vote ; $a++){//以降に重複があればnumberをインクリメント。
if($vote_sofar[$b]==$vote_sofar[$a]){
$number++;//おなじ投票内容があれば数え上げる。
}
}
$vote_sofar_num[$b] = $number;
//echo $vote_sofar_num[$b];
}
$dd = 0;
for ($b=0 ; $b<$int_times_vote ; $b++){
$found_max = 0;
if($vote_sofar_num[$b] > 0){
for ($d=$b+1 ; $d<$int_times_vote ; $d++){//マキシマムを求める。
$pos_max=$b;
if($vote_sofar_num[$b] < $vote_sofar_num[$d]){
$maximum = $vote_sofar_num[$d];
$pos_max=$d;
$found_max = 1; //見つけた。
}
}
//求めたマキシマムと最上の値を交換。
if ($found_max = 1){
$vote_sofar_num[$pos_max] = $vote_sofar_num[$b];
$vote_sofar_num[$b] = $maximum;
$swap = $vote_sofar[$pos_max];
$vote_sofar[$pos_max] = $vote_sofar[$b];
$vote_sofar[$b] = $swap;
}
}
}
for($b=0 ; $b<$int_times_vote ; $b++){//ここで画面に表示。
if($vote_sofar_num[$b] > 0){
echo $vote_sofar[$b];
echo ":";
echo $vote_sofar_num[$b];
echo "回\n";
}
}
return;
}