2012-08-12 8 views
13

मैं scandir(); फ़ंक्शन को अपनी लिखित सीमा से परे जाने की कोशिश कर रहा हूं, मुझे वर्तमान में समर्थन वाले अल्फा सॉर्टिंग से अधिक की आवश्यकता है। मुझे scandir(); परिणामों को संशोधित दिनांक द्वारा सॉर्ट करने की आवश्यकता है।स्कैंडिर() दिनांक संशोधित दिनांक

मैंने यहां कुछ समाधानों और विभिन्न वेबसाइटों के कुछ अन्य समाधानों की कोशिश की है, लेकिन मेरे लिए कोई भी काम नहीं करता है, इसलिए मुझे लगता है कि मेरे यहां पोस्ट करना उचित है।

function scan_dir($dir) 
{ 
    $files_array = scandir($dir); 
    $img_array = array(); 
    $img_dsort = array(); 
    $final_array = array(); 

    foreach($files_array as $file) 
    { 
     if(($file != ".") && ($file != "..") && ($file != ".svn") && ($file != ".htaccess")) 
     { 
      $img_array[] = $file; 
      $img_dsort[] = filemtime($dir . '/' . $file); 
     } 
    } 

    $merge_arrays = array_combine($img_dsort, $img_array); 
    krsort($merge_arrays); 

    foreach($merge_arrays as $key => $value) 
    { 
     $final_array[] = $value;  
    } 

    return (is_array($final_array)) ? $final_array : false; 
} 

लेकिन, यह मेरे लिए काम करने के लिए प्रतीत नहीं होता है, यह केवल 3 परिणाम देता है, लेकिन यह वापस आ जाएगी 16 परिणाम, वहाँ 16 कर रहे हैं क्योंकि:

क्या मैं अब तक की कोशिश की है यह है फ़ोल्डर में छवियों।

उत्तर

68
function scan_dir($dir) { 
    $ignored = array('.', '..', '.svn', '.htaccess'); 

    $files = array();  
    foreach (scandir($dir) as $file) { 
     if (in_array($file, $ignored)) continue; 
     $files[$file] = filemtime($dir . '/' . $file); 
    } 

    arsort($files); 
    $files = array_keys($files); 

    return ($files) ? $files : false; 
} 
+0

@dugi इस विधि का प्रयास करें। एक निर्देशिका में फ़ाइल नाम अद्वितीय होना चाहिए। इसलिए, वे कुंजी के रूप में इस्तेमाल किया जा सकता है। सरणी को मानों (संशोधन समय) द्वारा क्रमबद्ध किया जाता है और कुंजी (फ़ाइल नाम) उचित क्रम में वापस आती हैं। –

+0

कोशिश की और एक आकर्षण की तरह काम किया। धन्यवाद Ryoin। – Aborted

+0

एक आकर्षण की तरह काम करते हैं! – BSQ

0

मुझे लगता है कि अपने मूल कोड में इस मुद्दे को एक से अधिक फ़ाइलों में एक ही संशोधन दिनांक/समय इसलिए हो सकता था जब सरणियों के संयोजन में एक ही संशोधन दिनांक के साथ कई फ़ाइल प्रविष्टियों/समय अधिलेखित हो जाएगा और आप केवल केवल एक प्रविष्टि मिल जाएगा है उस टाइमस्टैम्प के लिए अंतिम सरणी में।

+0

मैं समझता हूं कि आपका क्या मतलब है। क्या इसे ठीक करने का कोई तरीका है? – Aborted

0

वैकल्पिक उदाहरण ..

$dir = "/home/novayear/public_html/backups"; 
chdir($dir); 
array_multisort(array_map('filemtime', ($files = glob("*.{sql,php,7z}", GLOB_BRACE))), SORT_DESC, $files); 
foreach($files as $filename) 
{ 
    echo "<a>".substr($filename, 0, -4)."</a><br>"; 
}