2012-07-23 11 views
7

Son zamanlarda proje euler problem kümelerinden biri üzerinde çalışıyordum ve bu garip soruna rastladım. Sorunu ilk çözümle doğru bir şekilde çözdüm, ancak diğer sürümün neden beklendiği gibi çalışmadığını bilmiyorum. BuradaPHP sıralama sorunu, arsort vs asort + dizi_reverse

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

Ve değil koddur: Burada

çalışır koddur

arsort($card_count, SORT_NUMERIC); 

Bu i değiştirmek sadece çizgidir ve sonunda büyük bir fark yaratıyor sonuç. Bununla ilgili herhangi bir fikir var mı?

+1

Dizini daha sonra nasıl okuyorsunuz - hangi dizinleri kullanıyorsunuz? – ametren

+1

Her ikisi de benim için aynı: http://codepad.org/80bWvlTv –

+0

Onun bir poker çözümü, temelde anahtardaki kart değerini eşleştiriyor ('2' veya 'A' veya 'J gibi) ') girişte kaç kez göründüğüne, bu şekilde görünebilir [' A '=> 2,' 8 '=> 2,' 4 '=> 1] iki as, iki sekiz ve bir dört temsil eder. . En yüksek miktarların arka tarafta ön ve alt miktarlarda olması gerektiğine güveniyorum. Gerekirse tam bir kod çözümü gönderebilirim, sadece PE politikasına karşı bildiğim cevabı vermek istemedim. –

cevap

4

Sorun, dizide eşit değerleri sıralamaktan kaynaklanmaktadır. diziyi atın:

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

dizi ters bu dizi asort($arr, SORT_NUMERIC) çağrılıyor. Bu nedenle, kod satırları:

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

geri orijinal amacıyla dizisinde koyacaktır.

Yani, örneğin dizi değişiklik ile daha üst sırada değerindeki ekleme:

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

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

getirisine olacaktır:

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

arsort($arr, SORT_NUMERIC); 

ederken getirisine olacaktır:

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

Bu konuda biraz ışık tutuyor ...