2012-09-05 29 views
9

Problem

Próbuję wyświetlić losową stronę z pliku o nazwie ../health/ W tym pliku znajduje się plik index.php i 118 innych pliki o nazwach plików php. Chciałbym losowo wyświetlić plik z folderu zdrowia, ale chciałbym, aby wykluczyć plik index.php.kod PHP, aby wykluczyć index.php użyciu glob

Ten kod zawiera czasami plik index.php. Próbowałem również zmienić linię $ exclude, aby pokazać ../health/index.php, ale wciąż nie ma szczęścia.

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

inny kod próbowałem jest następujący

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

Kod ten zawiera również plik index.php ale zamiast pokazywania strony wyświetla stronę jako błąd.

+0

Zmieniłem twoje pytanie, aby usunąć odpowiedź (rozwiązanie), które dodałeś. Ponieważ jesteś nowicjuszem w SO, działa on tak, że wybierasz odpowiedź, która najlepiej rozwiązała Twój problem i akceptujesz to klikając znacznik wyboru obok niego. –

Odpowiedz

15

Pierwszą rzeczą, która przyszła mi do głowy jest array_filter(), faktycznie był to preg_grep(), ale to nie ma znaczenia:

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

Z preg_grep() użyciu PREG_GREP_INVERT wykluczyć wzoru:

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

Pozwala to uniknąć konieczności użycia wywołania zwrotnego, chociaż praktycznie będzie prawdopodobnie mieć tę samą wydajność, co

Aktualizacja

pełny kod, który powinien działać dla konkretnego przypadku:

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

+1 za wzmiankę o 'preg_grep()' –

+0

Witam, dziękuję za odpowiedź, ale jestem trochę nowy w php i wciąż uczę się podstaw, gdzie twój kod mieści się w moim kodzie. Wielkie dzięki mally – mally

+0

@ user1649416 Zaktualizowałem odpowiedź, myślę, że będzie to miało większy sens teraz :) –

4

komplement odpowiedź Jacka, z preg_grep() można również zrobić:

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

ten powróci tablica ze wszystkimi plikami, które NIE pasują bezpośrednio do index.php. W ten sposób można odwrócić wyszukiwanie dla index.php bez flagi PREG_GREP_INVERT.

+0

Witam, dziękuję za odpowiedź, w rzeczywistości użyłem twojego kodu w kodzie gniazd i działa idealnie, doceniam twój wkład w to. – mally

Powiązane problemy