2011-06-19 11 views
21

संभव डुप्लिकेट:
PHP Sort a multidimensional array by element containing datePHP आदेश सरणी?

मुझे लगता है कि इस तरह दिखता है XML या एक PHP सरणी में JSON से कुछ डेटा है:

[0]= array(2) { 
    ["title"]= string(38) "Another title" 
    ["date"]= string(31) "Fri, 17 Jun 2011 08:55:57 +0200" 
} 
[1]= array(2) { 
    ["title"]= string(38) "My title" 
    ["date"]= string(31) "Mon, 16 Jun 2010 06:55:57 +0200" 
} 

मैं आपकी क्या अपेक्षाएं हैं तिथि के अनुसार दो वस्तुओं का आदेश है।

  1. क्या तिथि के अनुसार क्रमबद्ध करना संभव है, जब क्रम मूल्य प्रत्येक आइटम के अंदर होता है?
  2. क्या मुझे दिनांक प्रारूप को टाइमस्टैंप में बदलने की आवश्यकता है?

क्या मैं नहीं है

मैं तिथि का उपयोग करें और आईडी के रूप में सेट, लेकिन यह सही नहीं लग रहा है, क्योंकि दो आइटम एक ही तिथि हो सकता है हो सकता है करना चाहते हैं और फिर इसे होगा अद्वितीय नहीं है।

+0

इस पोस्ट के पहले उत्तर पर एक नज़र डालें: [कड़ी] (http://stackoverflow.com/questions/597863/how-to-sort-a-date-array-in-php) – Sander

उत्तर

65

आप छंटाई से पहले टाइमस्टैम्प को अपनी तिथियाँ कन्वर्ट करने के लिए की जरूरत नहीं है, लेकिन यह एक अच्छा विचार है, हालांकि, क्योंकि यह इसके बिना सॉर्ट करने के लिए और समय लगेगा।

$data = array(
    array(
     "title" => "Another title", 
     "date" => "Fri, 17 Jun 2011 08:55:57 +0200" 
    ), 
    array(
     "title" => "My title", 
     "date" => "Mon, 16 Jun 2010 06:55:57 +0200" 
    ) 
); 

function sortFunction($a, $b) { 
    return strtotime($a["date"]) - strtotime($b["date"]); 
} 
usort($data, "sortFunction"); 
var_dump($data); 
+0

बहुत सीधा, साफ जवाब । धन्यवाद। – Kray

+0

स्वच्छ उत्तर, लेकिन यदि दो तिथियां बराबर होती हैं तो यह मान खो देंगे –

+0

यह सच नहीं है, क्यों? वे एक-दूसरे के ठीक बाद सही होंगे। –

26

उपयोग usort:

usort($array, function($a1, $a2) { 
    $v1 = strtotime($a1['date']); 
    $v2 = strtotime($a2['date']); 
    return $v1 - $v2; // $v2 - $v1 to reverse direction 
}); 
+0

इस संस्करण के बारे में क्या? 'usort ($ sortArray, समारोह ($ एक, $ ख) { वापसी strcmp ($ एक [ 'article_created_date'], $ ख [ 'article_created_date']); });' – DrMed

16

मैं का उपयोग कर दिनांक समय तार की बजाय वस्तुओं, क्योंकि आप आसानी से तार है, जो छँटाई के लिए आवश्यक है तुलना नहीं कर सकते सलाह देते हैं। आपको तिथियों के साथ काम करने के लिए अतिरिक्त फायदे भी मिलते हैं।

एक बार जब आप दिनांक समय वस्तुओं है, छंटाई काफी आसान है:

usort($array, function($a, $b) { 
    return ($a['date'] < $b['date']) ? -1 : 1; 
}); 
-2

वह एक कुंजी के रूप में की तारीख होने पर विचार कर रही है, लेकिन चिंता है कि मूल्यों अन्य के ऊपर एक लिखा जाएगा, सब मैं दिखाना चाहती थी (शायद यह स्पष्ट नहीं है, कि मैं क्यों संपादित करता हूं) यह है कि वह अभी भी मूल्यों को बरकरार रख सकता है, एक दूसरे से ऊपर नहीं लिखा है, है ना?

<?php 
$data['may_1_2002']= 
Array(
'title_id_32'=>'Good morning', 
'title_id_21'=>'Blue sky', 
'title_id_3'=>'Summer', 
'date'=>'1 May 2002' 
); 

$data['may_2_2002']= 
Array(
'title_id_34'=>'Leaves', 
'title_id_20'=>'Old times', 
    'date'=>'2 May 2002 ' 
); 


echo '<pre>'; 
print_r($data); 
?>