PHP में तारीख तक फ़ाइलों को सॉर्ट करें


Answers

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

$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 पास कर 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 कहा जाता है, तो स्टेट कैश के कारण फ़ोरैच लूप में इसे फिर से कॉल करते समय कोई अतिरिक्त लागत नहीं होती है।

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);
}



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

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);
}



Links



Tags

php php   sorting