2009-02-28 13 views
17

में एक तिथि सरणी सॉर्ट करने के लिए मैं इस प्रारूप में एक सरणी है: (वर्ष माह, दिन के आधार पर, और)कैसे पीएचपी

Array 
(
    [0] => Array 
     (
      [28th February, 2009] => 'bla' 
     ) 

    [1] => Array 
     (
      [19th March, 2009] => 'bla' 
     ) 

    [2] => Array 
     (
      [5th April, 2009] => 'bla' 
     ) 

    [3] => Array 
     (
      [19th April, 2009] => 'bla' 
     ) 

    [4] => Array 
     (
      [2nd May, 2009] => 'bla' 
     ) 

) 

मैं तारीखों के आरोही क्रम में उन्हें सुलझाने के लिए चाहते हैं । ऐसा करने का सबसे अच्छा तरीका क्या है?

मूल रूप से ईमेल MySQL दिनांक स्वरूप में लाए जाने के किया जा रहा है, तो यह संभव है मुझे इस राज्य में सरणी पाने के लिए:

Array 
[ 
    ['2008-02-28']='some text', 
    ['2008-03-06']='some text' 
] 

शायद जब उन के माध्यम से अपने पाश इस प्रारूप में, मैं कर सकते हैं, को दूर सभी '-' (हाइफ़न) अंक इसलिए उन्हें अभिन्न के रूप में छोड़ा गया है, उन्हें array_sort() का उपयोग करके क्रमबद्ध करें और फिर भी उन्हें क्रमबद्ध करने के लिए उनके माध्यम से लूप करें? अगर कोई दूसरा तरीका था तो मैं पसंद करूंगा क्योंकि मैं प्रति उपयोगकर्ता के साथ 3 लूप कर रहा हूं।

धन्यवाद।

संपादित करें: मैं भी ऐसा कर सकता है:

$array[$index]=array('human'=>'28 Feb, 2009', 
        'db'=>'20080228', 
        'description'=>'Some text here'); 

लेकिन इस का उपयोग करते हुए, वहाँ 'डाटाबेस' तत्व अकेले के आधार पर सरणी सॉर्ट करने के लिए किसी भी तरह से हो सकता है?

संपादित करें 2: अपडेट किया गया प्रारंभिक var_dump "अंग्रेजी" प्रारूप

+2

क्या आप अपना खुद का प्रारूप बनाने के बजाय अपने डेटा पर var_dump() का उपयोग कर सकते हैं? कम से कम जब आपका स्वयं का प्रारूप अस्पष्ट और भ्रामक है जैसा आपने यहां पोस्ट किया था। ;-) – Tomalak

उत्तर

40

उपयोग आईएसओ (yyyy-mm-dd) स्वरूप के बजाय, और फिर बस उन्हें सही क्रम में प्राप्त करने के लिए ksort समारोह का उपयोग करें।

हाइफ़न को हटाने की कोई आवश्यकता नहीं है, ksort स्ट्रिंग कुंजियों पर अल्फान्यूमेरिक तुलना करेगा, और yyyy-mm-dd प्रारूप पूरी तरह से काम करता है क्योंकि लेक्सिकल ऑर्डर वास्तविक दिनांक आदेश के समान होता है।

EDIT मुझे लगता है कि अब आपने यह दिखाने के लिए अपना प्रश्न सही कर दिया है कि आपको वास्तव में सरणी की सरणी मिली है, और यह कि सॉर्ट कुंजी उप-सरणी में है। इस मामले में, आप uksort का उपयोग करना चाहिए के रूप में कहीं और की सिफारिश की है, लेकिन मैं सिफारिश करेंगे, न कि मानव पठनीय प्रारूप पार्स करने से है कि आप डीबी स्वरूपित तिथि के आधार पर अपने खुद के संपादित साथ जाने के लिए और प्रकार:

function cmp($a, $b) 
{ 
    global $array; 
    return strcmp($array[$a]['db'], $array[$b]['db']); 
} 

uksort($array, 'cmp'); 
4
function cmp($a, $b) {  
    global $array;  
    return strcmp($array[$a]['db'], $array[$b]['db']); 
}  
uksort($array, 'cmp'); 

मुझे लगता है कि usort() फ़ंक्शन uksort() के बजाय फ़ंक्शन का उपयोग करना बेहतर है, क्योंकि कभी-कभी आप वैश्विक चर का उपयोग नहीं कर सकते हैं और वैसे भी वैश्विक चर का उपयोग करना एक अच्छा अभ्यास नहीं है।

10

वास्तव में, इस का उपयोग करें:

usort($array, "cmp"); 

function cmp($a, $b){ 
    return strcmp($b['db'], $a['db']); 
} 

:)

+0

यह मेरे लिए काम किया। धन्यवाद। –

2

तुम भी गुमनाम समारोह इस्तेमाल कर सकते हैं।

// Sort in chronological order. 
usort($array, function($a, $b) { 
    return strcmp($a['db'], $b['db']); 
}); 
+1

यह उत्तर मूल रूप से पुराने उत्तरों के समान है – Machavity

+1

यह अज्ञात फ़ंक्शन का उपयोग कर रहा है जहां अन्य लोग नहीं करते हैं। –