2012-03-15 17 views
6

कुछ खोज कर दिया गया है, लेकिन मुझे लगता है कि सटीक उत्तर नहीं मिल रहा है।स्कैंडर - सॉर्ट न्यूमेरिक फाइलनाम

मैं 'स्कैंडिर ($ डीआईआर)' का उपयोग करके क्रमांकित फ़ाइल नामों वाली फ़ाइलों को खींचना चाहता हूं, लेकिन उन्हें ठीक से क्रमबद्ध करें। उदाहरण के लिए, फ़ाइल नाम हैं:

1-something.ext 

2-something-else.ext 

3-a-third-name.ext 

. 

. 

. 

10-another-thing.ext 

11-more-names.ext 

समस्या मैं आ रही है कि 10-एक-चौथाई-thing.ext से पहले 2-कुछ-else.ext दिखाएगा है। मैं सभी फाइल नामों के सामने अग्रणी '0' पेश करने से इस मुद्दे को हल करने का एक बेहतर तरीका खोजना चाहता हूं।

कोई विचार? धन्यवाद।

उत्तर

9

natsort वही करता है जो आपको चाहिए।

SORT_NUMERIC साथ sort भी फ़ाइल नाम है कि संख्या के साथ शुरू करने के लिए काम करेंगे, लेकिन अगर वहाँ भी कर रहे हैं नाम है कि सामने कोई संख्या (सभी गैर-संख्या-उपसर्ग के नाम से पहले नंबर पहले से जुड़ा हुआ नाम हल हो जाएगा यह टूट जाएगा, और एक दूसरे के सापेक्ष उनका आदेश वर्णमाला के बजाय यादृच्छिक होगा)।

1

आप तरह इस तरह उपयोग कर सकते हैं:

sort($arr, SORT_NUMERIC); // asuming $arr is your array 
+0

यह मेरा पहला आवेग भी था, लेकिन इसमें गंभीर समस्याएं हैं। – Jon

+0

ओपी से 'मैं क्रमांकित फ़ाइल नामों वाली फ़ाइलों को खींचना चाहता हूं' ऐसा प्रतीत होता है कि फ़ाइल नामों के पास हमेशा संख्याएं होती हैं। हालांकि अगर मिश्रित होते हैं तो नात्सॉर्ट जाने का रास्ता है। – anubhava

0

आप कुंजी पुन: असाइन करने (जो natsort नहीं है), का उपयोग usort() strnatcmp के साथ संयुक्त चाहते हैं() या strnatcasecmp():

usort($arr, 'strnatcmp'); // Or 'strnatcasecmp' for case insensitive 
संबंधित मुद्दे