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
配列の内容はvar_export()の内容そのまま貼り付けていただけると再現確認や調整も行いやすいので、そうしてもらえると助かります。
あれ?全部josukeになってますよ・・・
失礼しました!
また、array_count_values()以外の方法を探すのはどのような理由・経緯があるのでしょうか?実現できるならそれで問題ないようにも思います。
勉強の一環なので標準関数を独自実装して、関数を使った場合と使わなかった場合を比較してどれくらいの行数・コストになるのか知りたいのです。それを行う事でコーディングスキルも付いていくのでは?と考えています。
いろいろなやり方を検証するのは非常に良いことだと思います。がんばってください。
差し支えなければどのように解決したか回答にコメントいただけたらと
解決方法をコメントしました。
回答”で”ではなく回答”に”コメントいただきたかったのですが・・まあ大丈夫です。次から解決した回答にコメントつけるようにしてください。
回答欄に記載したつもりでしたが、こちらのコメント欄のことをおっしゃっているのでしょうか?
私の回答にコメントつけてください という意味です。ベストアンサーとは別に回答がつく形になるので解決済みなのに情報が散らばると良くないです。
もし私の回答はあくまで参考として実際に解決したものとして別個で回答を投稿したのであれば、ご自身の回答をベストアンサーとしてください。
理解しました。ありがとうございます!
回答2件
あなたの回答
tips
プレビュー