• ベストアンサー

配列のランク付け

配列のランク付けをしたいのですが方法が分からず困っています。 例えば、 $a = array("1", "5", "3", "2", "3", "1", "1")という配列があったら $b = array("5", "1", "2", "4", "2", "5", "5")といったように値が大きい順に ソートせずランク付けして新しい配列を作れたらと考えています。 アドバイスをお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

>解説 具体的な処理はマニュアルをみてもらえばわかるのと思うのでロジックだけ (1)$aの各値について要素数を数え、それを逆順に$xに保存しておきます (2)$aの値と$xのキーを比較して、おなじになるまで要素数を足します。 ただし初期値は1。 たとえば$aの値が1のときは1+$x[5]+$x[3]+$x[2]、 $aの値が3のときは1+$x[5] (3)それを配列$bに保存していけば最終的に$bが完成します

その他の回答 (1)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

たとえばこんなかんじ <?PHP $a = array("1", "5", "3", "2", "3", "1", "1"); foreach($a as $val) $x[$val]++; krsort($x); foreach($a as $val){ $val1=1; foreach($x as $key=>$val2){ if($key==(int) $val) break; $val1+=$val2; } $b[]=$val1; } print_r($b);

yuu789
質問者

補足

試してみたところ見事なりました!!ありがとうございます。 しかしながら、このプログラムがどのような処理をしているのか よく分からずにいます。 もしよろしければ解説をお願いします。

関連するQ&A

専門家に質問してみよう