2011-11-28 18 views
7

सॉर्ट करना मुझे पता है कि प्राकृतिक क्रम में सरणी तत्वों को सॉर्ट करने के लिए php में natsort() और natcasesort() फ़ंक्शन हैं। मैं निम्नलिखित मदों को हल करने की कोशिश कर रहा हूं।एक php सरणी को क्रमबद्ध रूप से

array[0]= '10. xyz'; 
    array[1]= '13. xyz'; 
    array[2]= '2. xyz'; 
    array[3]= '1a. xyz'; 
    array[4]= '6. xyz'; 
    array[5]= '1b. xyz'; 
    array[6]= '4a. xyz'; 
    array[7]= '4b. xyz'; 

अब अगर मैं natsort(), '10 .. 'और '13 ..' लागू करता हूं तो '1a ..' से ऊपर रखा गया है। मैं अपने PHP कोड को यह सोचने के लिए कैसे बना सकता हूं कि '10 .. '' 1a ... 'और' 1a ... 'से अधिक है शीर्ष पर होना चाहिए? मेरी विशेष मामले में सही उत्पादन होता है:

'1a. xyz'; 
'1b. xyz'; 
'2. xyz'; 
'4a. xyz'; 
'4b. xyz'; 
'6. xyz'; 
'10. xyz'; 
'13. xyz'; 

मैं एक कस्टम algo थे, लेकिन यह एक ही है ... यह 1 ए 'से पहले' '10 देता है .. ... '। यहाँ अपने कस्टम समारोह:

function cmp($a, $b) { 
    $a_ex=explode(".",$a); 
    $b_ex=explode(".",$b); 
    if ($a_ex[0] == $b_ex[0]) { 
     return 0; 
    } 
    return ($a_ex[0] < $b_ex[0]) ? -1 : 1; 
} 
+0

केवल usort ..... – idm

+0

के रूप में दूसरों को तैनात किया है, 'natsort()' मेरे लिए काम करता सकते हैं। आप PHP का किस संस्करण का उपयोग कर रहे हैं? – Hammerite

उत्तर

5

उपयोग natsort():

$array[0]= '10. xyz'; 
$array[1]= '13. xyz'; 
$array[2]= '2. xyz'; 
$array[3]= '1a. xyz'; 
$array[4]= '6. xyz'; 
$array[5]= '1b. xyz'; 
$array[6]= '4a. xyz'; 
$array[7]= '4b. xyz'; 

natsort($array); 

print_r($array); 
0

उपयोग usort अपने स्वयं के कस्टम एल्गोरिथ्म के साथ

+0

natsort() इसके लिए वर्तमान एल्गोरिदम। – pltvs

1

natsort मेरे लिए ठीक काम करता है ...

अन्यथा str_pad का उपयोग सरणी को सॉर्ट करने से पहले संख्याओं को प्रारूपित करने के लिए।

या आप एक कस्टम समारोह, शायद intval साथ साथ उपयोगकर्ता usort ...

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