2012-07-23 8 views
7

Ich habe kürzlich an einem der Projekt-Euler-Problem-Sets gearbeitet und bin auf dieses seltsame Problem gestoßen. Ich habe das Problem mit der ersten Lösung richtig gelöst, aber ich weiß nicht, warum die andere Version nicht wie erwartet funktioniert. HierPHP sorting issue, arsort vs asort + array_reverse

ist der Code, der funktioniert:

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

Und hier ist der Code, der nicht:

arsort($card_count, SORT_NUMERIC); 

Dies ist die einzige Linie i ändern und es macht einen großen Unterschied am Ende Ergebnis. Irgendwelche Ideen, was ist damit?

+1

Wie liest du das Array später - welche Indizes verwendest du? – ametren

+1

Beide sind die gleichen für mich: http://codepad.org/80bWvlTv –

+0

Es ist eine Poker-Lösung, so im Grunde ist es die Karte Wert in der Taste (wie '2' oder 'A' oder 'J ') Wie oft es in der Eingabe erschien, so könnte es so aussehen [' A '=> 2,' 8 '=> 2,' 4 '=> 1], um zwei Asse, zwei Achten und eine Vier darzustellen . Ich verlasse mich darauf, dass die höchsten Beträge vorne und die unteren Beträge hinten liegen sollten. Ich kann eine vollständige Code-Lösung bei Bedarf veröffentlichen, wollte nur nicht die Antwort geben, wie ich es gegen PE-Politik weiß. –

Antwort

4

Das Problem tritt beim Sortieren gleicher Werte im Array auf. Nehmen Sie die Array:

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

Aufruf asort($arr, SORT_NUMERIC) auf diesem Array wird das Array umkehren. Somit sind die Codezeilen:

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

wird das Array stellen in der ursprünglichen Reihenfolge .

Also, in einem Wert hinzufügen, der das Array als solche höher mit Änderung ist:

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

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

wird yeild:

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

während

arsort($arr, SORT_NUMERIC); 

wird yeild:

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

Hoffentlich wirft das ein wenig Licht auf das Problem ...