家の中でのこだわりスペースはどこですか?

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

A 回答 (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が完成します
    • good
    • 0

たとえばこんなかんじ



<?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);

この回答への補足

試してみたところ見事なりました!!ありがとうございます。

しかしながら、このプログラムがどのような処理をしているのか
よく分からずにいます。
もしよろしければ解説をお願いします。

補足日時:2012/10/24 10:45
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報