2012-09-05 7 views
9

समस्या

मैं ../health/ कहा जाता है इस फ़ाइल में एक फ़ाइल से एक यादृच्छिक पृष्ठ प्रदर्शित करने के लिए कोशिश कर रहा हूँ वहाँ एक index.php फ़ाइल और 118 अन्य है फाइलें php फ़ाइलों नामित। मैं यादृच्छिक रूप से स्वास्थ्य फ़ोल्डर से एक फ़ाइल प्रदर्शित करना चाहता हूं लेकिन मैं इसे index.php फ़ाइल को बाहर करना चाहता हूं।PHP कोड का उपयोग कर ग्लोब index.php बाहर करने के लिए

इस निम्नलिखित कोड में कभी-कभी index.php फ़ाइल भी शामिल है। मैंने ../health/index.php दिखाने के लिए $ बहिष्कृत लाइन को बदलने का भी प्रयास किया है लेकिन अभी भी कोई भाग्य नहीं है।

<?php 
$exclude = array("index.php"); // can add more here later 
$answer = array_diff(glob("../health/*.php"),$exclude); 
$whatanswer = $answer[mt_rand(0, count($answer) -1)]; 
include ($whatanswer); 
? 

एक और कोड मैं कोशिश की है निम्नलिखित

<?php 
$exclude = array("../health/index.php"); // can add more here later 
$health = glob("../health/*.php"); 
foreach ($health as $key => $filename) { 
foreach ($exclude as $x) { 
if (strstr($filename, $x)) { 
unset($whathealth[$key]); 
} 
} 
} 
$whathealth = $health[mt_rand(0, count($health) -1)]; 
include ($whathealth); 
?> 

इस कोड को भी index.php फ़ाइल शामिल बल्कि पेज दिखा तुलना में यह एक त्रुटि के रूप में पेज प्रदर्शित करता है।

+0

मैंने आपके प्रश्न को आपके द्वारा जोड़े गए उत्तर (समाधान) को बाहर निकालने के लिए संपादित किया है। चूंकि आप एसओ के लिए नए हैं, वैसे ही यह काम करता है कि आप एक ऐसा उत्तर चुनते हैं जिसने आपकी समस्या का सबसे अच्छा हल किया है और आप इसे स्वीकार करते हैं इसके बगल में स्थित चेक मार्क पर क्लिक करके। –

उत्तर

15

पहली बात यह है कि मन के लिए आया था array_filter() है, वास्तव में यह preg_grep() था, लेकिन है कि कोई फर्क नहीं पड़ता:

$health = array_filter(glob("../health/*.php"), function($v) { 
    return false === strpos($v, 'index.php'); 
}); 

preg_grep() साथ PREG_GREP_INVERT का उपयोग कर पैटर्न को बाहर करने के:

$health = preg_grep('/index\.php$/', glob('../health/*.php'), PREG_GREP_INVERT); 

यह कॉलबैक का उपयोग करने से बचाता है हालांकि व्यावहारिक रूप से यह वही प्रदर्शन होगा

अद्यतन

पूरा कोड है कि आपके मामले में आने से काम करना चाहिए: preg_grep() साथ,

$health = preg_grep('/index\.php$/', glob('../health/*.php'), PREG_GREP_INVERT); 
$whathealth = $health[mt_rand(0, count($health) -1)]; 
include ($whathealth); 
+2

+1 'preg_grep() ' –

+0

के उल्लेख के लिए +1 हैलो, आपकी प्रतिक्रिया के लिए धन्यवाद लेकिन मैं PHP के लिए थोड़ा नया हूं और अभी भी मूल बातें सीख रहा हूं, आपका कोड मेरे कोड में कहां फिट है। बहुत धन्यवाद माली – mally

+0

@ user1649416 मैंने जवाब अपडेट किया है, मुझे लगता है कि यह अब और अधिक समझ में आएगा :) –

4

जैक जवाब तारीफ करने के लिए आप भी कर सकते हैं:

$files = array_values(preg_grep('/^((?!index.php).)*$/', glob("*.php"))); 

यह वापस आ जाएगी सभी फ़ाइलों के साथ एक सरणी जो सीधे index.php से मेल नहीं खाती है। इस प्रकार आप ध्वज के बिना index.php के लिए खोज को उलटा कर सकते हैं।

+0

हैलो, आपके उत्तर के लिए धन्यवाद, मैंने वास्तव में जैक कोड के भीतर अपने कोड का उपयोग किया और पूरी तरह से काम करता है, मैं इस पर आपके इनपुट की सराहना करता हूं। – mally

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