2012-07-23 9 views
7

私は最近、プロジェクトのオイラーの問題セットの1つで作業していましたが、この奇妙な問題に遭遇しました。最初の解決策で問題を正しく解決しましたが、なぜ他のバージョンが期待どおりに機能しないのか分かりません。ここでPHPソート問題、arsortとasort + array_reverse

は動作するコードです:

asort($card_count, SORT_NUMERIC); 
$card_count = array_reverse($card_count, true); 

そして、ここではそうではないコードは次のとおりです。

arsort($card_count, SORT_NUMERIC); 

これは私が変更のみのラインであり、それは最終的に大きな違いを作ります結果。どのようなアイデアはこれで何が起こっている?

+1

あなたはどのようにインデックスを使用していますか? – ametren

+1

これらはどちらも私にとっては同じです:http://codepad.org/80bWvlTv –

+0

それはポーカーソリューションなので、基本的にはキーのカードの値をマッピングしています( '2'や 'A'や 'J ')を入力に何回出現させたかを調べるため、2つのエース、2つのエイト、1つのエースを表すために[' A '=> 2、' 8 '=> 2、' 4 '=> 。私は、最高額は前部にあり、額は後ろにあるべきであるという事実に頼っています。私は必要に応じて完全なコードソリューションを投稿することができます、ちょうど私がそのPEポリシーに対して知っているように答えをあきらめたい。 –

答えて

4

問題は配列内の等しい値をソートする際に発生します。配列を取る:この配列にasort($arr, SORT_NUMERIC)を呼び出す

$arr = array(
    'a' => 1, 
    'b' => 1, 
    'c' => 1, 
    'd' => 1 
); 

配列が逆になります。したがって、コードの行:

asort($arr, SORT_NUMERIC); 
$arr = array_reverse($arr, true); 

バック元の順序にアレイを配置します。

したがって、などアレイ変化に高いですつの値に加算:

$arr = array(
    'a' => 1, 
    'b' => 1, 
    'c' => 2, 
    'd' => 1 
); 

asort($arr, SORT_NUMERIC); 
$arr = array_reverse($arr, true); 

はyeildます

Array 
(
    [c] => 2 
    [a] => 1 
    [b] => 1 
    [d] => 1 
) 

arsort($arr, SORT_NUMERIC); 

ながらはyeildます

Array 
(
    [c] => 2 
    [d] => 1 
    [b] => 1 
    [a] => 1 
) 

うまくいけば、これは問題にいくつかの光を当てます。