PHP में तिथि के अनुसार सॉर्ट करें


Answers

यह सभी फ़ाइलों को पथ / में / फाइलों में एक .swf एक्सटेंशन के साथ एक सरणी में प्राप्त कर लेगा और फिर फ़ाइल की मीट

$files = glob('path/to/files/*.swf');
usort($files, function($a, $b) {
    return filemtime($a) < filemtime($b);
});

उपरोक्त लम्बेडा फ़ंक्शन का उपयोग करता है और PHP 5.3 की आवश्यकता होती है। 5.3 से पहले, आप ऐसा करेंगे

usort($files, create_function('$a,$b', 'return filemtime($a)<filemtime($b);'));

यदि आप किसी अनाम फ़ंक्शन का उपयोग नहीं करना चाहते हैं, तो आप कॉलबैक को एक नियमित फ़ंक्शन के रूप में भी परिभाषित कर सकते हैं और फ़ंक्शन नाम को usort बजाय usort हैं।

परिणामी सरणी के साथ, आप फिर से इस तरह फाइलों पर फिर से चलेंगे:

foreach($files as $file){
    printf('<tr><td><input type="checkbox" name="box[]"></td>
            <td><a href="%1$s" target="_blank">%1$s</a></td>
            <td>%2$s</td></tr>', 
            $file, // or basename($file) for just the filename w\out path
            date('F d Y, H:i:s', filemtime($file)));
}

ध्यान दें कि क्योंकि फाइलों को सॉर्ट करने पर आप filemtime पहले से ही कह चुके हैं, stat कैश के कारण इसे फिर से filemtime में कोई अतिरिक्त लागत नहीं है।

Question

मेरे पास वर्तमान में एक index.php फ़ाइल है जो मुझे एक ही निर्देशिका में फाइलों की सूची को आउटपुट करने की अनुमति देती है, आउटपुट नाम दिखाता है, तब मैं फ़ाइलमैटि () फ़ंक्शन को फ़ाइल को संशोधित करने की तिथि दिखाने के लिए उपयोग करता था। मेरी समस्या अब है, मैं नवीनतम संशोधित फाइल को दिखाने के लिए आउटपुट कैसे सॉर्ट करूँगा ?, मैं थोड़ी देर सोच रहा था कि यह कैसे करना है अगर केवल मैं इसे mysql इंटरैक्शन के साथ कर रहा हूं, तो इसमें कोई समस्या नहीं होगी। कृपया मुझे एक उदाहरण दिखाएं कि नवीनतम संशोधित एक से शुरू होने वाली फ़ाइलों की सूची को सॉर्ट और आउटपुट कैसे करें यह अब मेरे लिए है

if ($handle = opendir('.')) {
while (false !== ($file = readdir($handle))) {
       if ($file != "." && $file != "..") {
        $lastModified = date('F d Y, H:i:s',filemtime($file));
          if(strlen($file)-strpos($file,".swf")== 4){
            echo "<tr><td><input type=\"checkbox\" name=\"box[]\"></td><td><a href=\"$file\" target=\"_blank\">$file</a></td><td>$lastModified</td></tr>";
           }
       }
   }
   closedir($handle);
}



मैं केवल कुछ कुछ अतिरिक्त लाइनों के साथ अपने सटीक प्रस्तावित कोड का उपयोग करता हूं विचार अधिक या कम @ एरिया द्वारा प्रस्तावित एक ही है, परन्तु इस समाधान में कुंजियों पर कोई विवाद नहीं हो सकता क्योंकि निर्देशिका में प्रत्येक फ़ाइल का एक अलग फ़ाइल नाम है और इसलिए इसे कुंजी में जोड़कर संघर्ष को हल करता है। कुंजी का पहला भाग एक तरह से स्वरूपित दिनांक समय स्ट्रिंग है, जैसे कि मैं इनमें से दो की तुलना कर सकते हैं।

if ($handle = opendir('.')) {
    $result = array();
    while (false !== ($file = readdir($handle))) {
        if ($file != "." && $file != "..") {
            $lastModified = date('F d Y, H:i:s',filemtime($file));
            if(strlen($file)-strpos($file,".swf")== 4){
                $result [date('Y-m-d H:i:s',filemtime($file)).$file] =
                    "<tr><td><input type=\"checkbox\" name=\"box[]\"></td><td><a href=\"$file\" target=\"_blank\">$file</a></td><td>$lastModified</td></tr>";
            }
        }
    }
    closedir($handle);
    krsort($result);
    echo implode('', $result);
}