2011-08-20 16 views
17

जब भी मैं स्कैंडर का उपयोग करता हूं() मुझे सरणी की शुरुआत में अवधि प्राप्त होती है?जब भी मैं स्कैंडर का उपयोग करता हूं() मुझे सरणी की शुरुआत में अवधि मिलती है?

Array 
(
    [0] => . 
    [1] => .. 
    [2] => bar.php 
    [3] => foo.txt 
    [4] => somedir 
) 
Array 
(
    [0] => somedir 
    [1] => foo.txt 
    [2] => bar.php 
    [3] => .. 
    [4] => . 
) 

उत्तर

23

उन वर्तमान (.) और माता पिता (..) निर्देशिका हैं। वे सभी निर्देशिकाओं में मौजूद हैं, और इसका उपयोग निर्देशिका और उसके प्रत्यक्ष माता-पिता को संदर्भित करने के लिए किया जाता है। यूनिक्स सम्मेलन में

4

। वर्तमान निर्देशिका का एक लिंक है जबकि .. मूल निर्देशिका का एक लिंक है। दोनों निर्देशिका सूचकांक में एक फ़ाइल के रूप में मौजूद हैं।

+0

क्या आप एक स्रोत उद्धृत कर सकते हैं जो कहता है कि यह एक यूनिक्स सम्मेलन है? डॉस और विंडोज़ में '.' और' ..' भी हैं, है ना? – phihag

+2

विंडोज़ में भी वे हैं, यह यूनिक्स के लिए विशिष्ट नहीं है। – Mat

+0

यह एक यूनिक्स सम्मेलन है; जो इसे एक डॉस और विंडोज सम्मेलन से भी नहीं रोकता है। –

83

हर निर्देशिका सूची में मौजूद दो प्रविष्टियों हैं:

  • . (जड़ वर्तमान निर्देशिका है अगर या रूट) वर्तमान निर्देशिका
  • .. मूल निर्देशिका को संदर्भित करता है को संदर्भित करता है

आप उन्हें scandir के परिणामों की को छान कर परिणामों से उन्हें निकाल सकते हैं:

$allFiles = scandir(__DIR__); // Or any other directory 
$files = array_diff($allFiles, array('.', '..')); 
+8

अच्छा। इसे एक पंक्ति में भी संघनित किया जा सकता है: '$ files = array_diff (स्कैंडर (__ डीआईआर__), सरणी ('।', '..')); '(देखें http://www.electrictoolbox.com/php-scandir- लगता है-फ़ाइलें /)। – SharpC

1

scandir उपयोग से इस समारोह . और .. निकालने के लिए:

function scandir1($dir) 
{ 
    return array_values(array_diff(scandir($dir), array('..', '.'))); 
} 

array_values आदेश फिर से अनुक्रमित सरणी इतना है कि यह 0. से शुरू होता है आप फिर से अनुक्रमण सरणी की जरूरत नहीं है, तो स्वीकृत उत्तर ठीक काम करेगा। बस: array_diff(scandir($dir), array('..', '.'))

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

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