48593


以下の関数を実行すると、上から投票数が多い順に

[code]

    （例）
    1.13.1.14: 8回
    5.11.5.12: 3回
    2.13.3.14: 1回
    
[/code]

（1.13.1.14の部分が投票内容）  
といった感じで表示されるはずなんですが、たぶんソートの部分が間違ってて一番大きい投票結果が並び続けてしまいます。

[code]

    （例）
    1.13.1.14: 8回
    1.13.1.14: 8回
    1.13.1.14: 8回
    
[/code]

教えてくれる方いたらよろしくおねがします。

追記

"投票内容"の中身は数値。今回は18になっています。  
"投票ボタンが押された回数"の中身は、

[code]

    （実際）
    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
    
[/code]

となっています。理想では、show_votes()を実行すると、

[code]

    （実際）
    2.19.8.13:12回
    3.19.8.13:4回
    2.19.7.13:2回
    
[/code]

と画面に表示されます。

[code]

    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;
    }
    
[/code]


CC BY-SA 4.0
2018-09-19T11:32:57.660
48555
2018-09-20T09:33:41.337
2018-09-20T08:37:18.687
20666
20666
question
php sort
投票結果を投票数が多い順に並べ替えて表示したい


私だったらこうします。  
これではだめですかね？

[code]

    function showVotes()
    {
        $vote_sofar = file("投票内容");
    
        //データをためるバケツを用意
        $backet = array();
    
        foreach($vote_sofar as $one_vote)
        {
            //キーの有無チェック
            if(array_key_exists($one_vote, $backet))
            {
                //既にキーがあれば数をインクリメント
                $num = $backet[$one_vote];
                $num++;
                $backet[$one_vote] = $num;
            }
            else
            {
                //キーが無ければ枠を用意
                $backet[$one_vote] = 1;
            }
        }
    
        //値で降順並べ替え
        arsort($backet);
    
        foreach($backet as $key => $value)
        {//ここで画面に表示。
                echo $key;
                echo ":";
                echo $value;
                echo "回\n";
        }
    }
    
[/code]


CC BY-SA 4.0
2018-09-20T09:33:41.337
48593
2018-09-20T09:33:41.337
17014
48555
answer