質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

4584閲覧

ランキング作成・同順

teaAI

総合スコア36

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2018/09/29 01:55

編集2018/09/29 02:19

PHP

1$data =[ 2 'josuke' => 5, 3 'jotaro' => 4, 4 'joline' => 3, 5 'jobani' => 3, 6 'joseph' => 3, 7 'jonathan' => 1, 8];

上記の様な配列($data)の要素を数値の大きい順にランク付けさせてデータ成型させて下記配列$rankingの様に作成したいのですがうまくいきません。
主に同順の時のデータ作成ロジックがうまく実装できません。

PHP

1$ranking =[ 2 0 => 1, 3 1 => 2, 4 2 => 3, 5 3 => 3, 6 4 => 3, 7 5 => 6, 8]; 9//下記の様にビルトイン関数のarray_count_valuesを使えば実装できるのですが、下記以外の方法(ビルトインをなるべく使用せずに)で実装したいです。 10 $rank =1 11 $ranking =[]; 12 foreach(array_count_values($data) as $key => $value){ 13 for($i=0; $i<$value; $i++){ 14 $ranking[] = $rank; 15 } 16 $rank += $value; 17 } 18

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2018/09/29 02:02

配列の内容はvar_export()の内容そのまま貼り付けていただけると再現確認や調整も行いやすいので、そうしてもらえると助かります。
m.ts10806

2018/09/29 02:17

あれ?全部josukeになってますよ・・・
teaAI

2018/09/29 02:19

失礼しました!
m.ts10806

2018/09/29 02:23

また、array_count_values()以外の方法を探すのはどのような理由・経緯があるのでしょうか?実現できるならそれで問題ないようにも思います。
teaAI

2018/10/01 01:33

勉強の一環なので標準関数を独自実装して、関数を使った場合と使わなかった場合を比較してどれくらいの行数・コストになるのか知りたいのです。それを行う事でコーディングスキルも付いていくのでは?と考えています。
m.ts10806

2018/10/01 01:42

いろいろなやり方を検証するのは非常に良いことだと思います。がんばってください。
m.ts10806

2018/10/19 03:23

差し支えなければどのように解決したか回答にコメントいただけたらと
teaAI

2018/10/19 23:19

解決方法をコメントしました。
m.ts10806

2018/10/19 23:23

回答”で”ではなく回答”に”コメントいただきたかったのですが・・まあ大丈夫です。次から解決した回答にコメントつけるようにしてください。
teaAI

2018/10/19 23:28

回答欄に記載したつもりでしたが、こちらのコメント欄のことをおっしゃっているのでしょうか?
m.ts10806

2018/10/19 23:30

私の回答にコメントつけてください という意味です。ベストアンサーとは別に回答がつく形になるので解決済みなのに情報が散らばると良くないです。
m.ts10806

2018/10/19 23:31 編集

もし私の回答はあくまで参考として実際に解決したものとして別個で回答を投稿したのであれば、ご自身の回答をベストアンサーとしてください。
teaAI

2018/10/19 23:33

理解しました。ありがとうございます!
guest

回答2

0

ベストアンサー

$dataが既にポイント降順とかに並べ替える前提であれば、私が以前回答した質問にありました。
ほかの回答もarray_count_values()を含めて別のやり方も提示されているので、参考にしてみてください。

投稿2018/09/29 02:27

m.ts10806

総合スコア80850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

teaAI

2018/09/29 04:33

ありがとうございます!参考にさせていただきます!
guest

0

php

1class Ranking { 2 private $voteNum =[]; 3 private $setRank=[]; 4 private $votesCollection=[]; 5 private $rankCollection=[]; 6 7 public function vote($value){ 8 $this->voteNum[] = $value; 9 self::sumVote($this->voteNum); 10 } 11 12 private function sumVote($getValue){ 13 // 現状メソッドを使う 14 $voteTimes = array_count_values($getValue); 15 arsort($voteTimes); 16 return $this->calcRank($voteTimes); 17 } 18 19 private function calcRank($voteTimes){ 20 $this->setRank =1; 21 $tmpRanking =[]; 22 foreach(array_count_values($voteTimes) as $key => $value){ 23 for($i=0; $i<$value; $i++){ 24 $tmpRanking[] = $this->setRank; 25 } 26 $this->setRank += $value; 27 } 28 29 // 以下コメントアウト箇所が解決箇所になります 30 // array_count_valuesを使わなかった場合 31 // $counter =[]; 32 // foreach ($voteTimes as $key => $value){ 33 // $counter[] = $value; 34 // } 35 36 // $ranker=[]; 37 // foreach ($counter as $key => $val){ 38 // if($key===0){ 39 // $ranker[] = $this->rank; 40 // }else { 41 // $pre = $key -1; 42 43 // if($val === $counter[$pre]){ 44 // $ranker[] = $this->rank; 45 // }else { 46 // 添字のkeyに+1をしてあげる 47 // $this->rank = 1+$key; 48 // $ranker[] = $this->rank; 49 // } 50 // } 51 // } 52 53 $this->votesCollection = $voteTimes; 54 $this->rankCollection = $tmpRanking; 55 } 56 57 public function getRank(){ 58 $count=0; 59 foreach($this->votesCollection as $key => $value){ 60 echo "Rank {$this->rankingRank[$count]}: {$key}({$value})\n"; 61 $count++; 62 } 63 } 64} 65

投稿2018/10/19 23:18

teaAI

総合スコア36

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問