2012-07-23 8 views
7

मैं हाल ही में प्रोजेक्ट यूलर समस्या सेट में से एक पर काम कर रहा था और इस अजीब मुद्दे पर आया था। मैंने पहले समाधान के साथ समस्या को सही तरीके से हल किया है, लेकिन मुझे नहीं पता कि दूसरा संस्करण अपेक्षित रूप से क्यों काम नहीं करता है।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' या 'ए', या 'जे ') इनपुट में कितनी बार दिखाई दिया, इसलिए यह दो एसेस, दो आठ और एक चार का प्रतिनिधित्व करने के लिए इस [' ए '=> 2,' 8 '=> 2,' 4 '=> 1] जैसा दिख सकता है । मैं इस तथ्य पर भरोसा करता हूं कि उच्चतम मात्रा पीछे और नीचे की मात्रा में होनी चाहिए। यदि आवश्यक हो तो मैं एक पूर्ण कोड समाधान पोस्ट कर सकता हूं, सिर्फ उत्तर देना नहीं चाहता क्योंकि मैं पीई नीति के खिलाफ इसे जानता हूं। –

उत्तर

4

समस्या सरणी में बराबर मानों को क्रमबद्ध करने के साथ उत्पन्न होती है। सरणी लें:

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

इस सरणी पर asort($arr, SORT_NUMERIC) कॉलिंग सरणी रिवर्स जाएगा। इसलिए, कोड की तर्ज:

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

उपज जाएगा:

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

जबकि

arsort($arr, SORT_NUMERIC); 

उपज जाएगा:

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

उम्मीद है कि यह इस मुद्दे पर कुछ प्रकाश डालता है ...

संबंधित मुद्दे