2011-08-19 17 views
11

मैं कैसे फिर से व्यवस्था कर सकते हैं इस तरह वस्तुओं की एक सरणी:क्रमबद्ध सरणी

[495] => stdClass Object 
     (
     [date] => 2009-10-31 18:24:09 
     ... 
     ) 
[582] => stdClass Object 
     (
     [date] => 2010-2-11 12:01:42 
     ... 
     ) 
... 

date कुंजी के द्वारा, पहले सबसे पुराना?

उत्तर

24
usort($array, function($a, $b) { 
    return strtotime($a['date']) - strtotime($b['date']); 
}); 

या आप पीएचपी 5.3 नहीं है:

function cb($a, $b) { 
    return strtotime($a['date']) - strtotime($b['date']); 
} 
usort($array, 'cb'); 
+3

अच्छा लग रहा है, और मैं दिनांक/समय डेटाबेस में छँटाई करने के लिए ओ पी करने के लिए सलाह देते हैं, और/या स्वरूपित मान के साथ एक सादे यूनिक्स टाइमस्टैम्प लौटने के लिए, strtotime के रूप में() है समझदार ओवरहेड और बार-बार सॉर्टिंग बहुत ई बना देगा xpensive। –

+0

हम्म .. लेकिन यह पुरानी संख्यात्मक कुंजी नहीं रखता है .. – Nadine

+2

'uortort' द्वारा 'usort' को प्रतिस्थापित करें, फिर – arnaud576875

2

मैं arnaud576875 के जवाब पर विस्तार करने के लिए करना चाहता था। मैं इस मुद्दे पर भाग गया, लेकिन DateTime वस्तुओं का उपयोग करने के साथ। इस तरह मैं एक ही चीज़ को पूरा करने में सक्षम था।

usort($array, function($a, $b) { 
    return $a['date']->format('U') - $b['date']->format('U'); 
}); 
11

के बाद से मूल प्रश्न stdClass के एरे() वस्तुओं छँटाई के बारे में है, यहाँ कोड है जो करता है, तो $ एक और $ ख वस्तुओं रहे हैं काम करेगा है:

usort($array, function($a, $b) { 
    return strtotime($a->date) - strtotime($b->date); 
}); 

या आप नहीं है, तो पीएचपी 5.3:

function cb($a, $b) { 
    return strtotime($a->date) - strtotime($b->date); 
} 
usort($array, 'cb'); 
+2

यह सही उत्तर होना चाहिए। – devXen

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