2012-09-05 21 views
9

Problema

Sto cercando di visualizzare una pagina a caso da un file chiamato ../health/ In questo file è presente un file index.php e 118 altri file chiamati file php. Vorrei visualizzare in modo casuale un file dalla cartella della salute, ma mi piacerebbe che escludesse il file index.php.codice PHP per escludere index.php utilizzando glob

Questo codice seguente include talvolta il file index.php. Ho anche provato a modificare la riga $ exclude per mostrare ../health/index.php ma ancora senza fortuna.

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

altro codice ho trovato è il seguente

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

Questo codice include anche il file index.php ma piuttosto che mostra la pagina che visualizza la pagina come un errore.

+0

Ho modificato la tua domanda per eliminare la risposta (soluzione) che hai aggiunto. Dal momento che sei nuovo in SO, il modo in cui funziona è che tu scelga una risposta che ha risolto il tuo problema e lo accetti facendo clic sul segno di spunta accanto ad esso. –

risposta

15

La prima cosa che è venuta in mente è array_filter(), in realtà era preg_grep(), ma questo non ha importanza:

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

Con preg_grep() utilizzando PREG_GREP_INVERT di escludere il modello:

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

Evita di dover utilizzare una richiamata, anche se praticamente avrà probabilmente le stesse prestazioni

Aggiornamento

Il codice completo che dovrebbe funzionare per il vostro caso particolare:

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

+1 per la menzione di 'preg_grep()' –

+0

Ciao, grazie per la tua risposta, ma sono un po 'nuovo su php e sto ancora imparando le basi, dove il tuo codice si adatta al mio codice. Mille grazie, – mally

+0

@ user1649416 Ho aggiornato la risposta, penso che ora avrà più senso :) –

4

per complimentarmi con la risposta di Jack, con preg_grep() si può anche fare:

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

Ciò restituirà una matrice con tutti i file che NON corrispondono a index.php direttamente. In questo modo è possibile invertire la ricerca di index.php senza il flag PREG_GREP_INVERT.

+0

Ciao, grazie per la tua risposta, ho effettivamente usato il tuo codice all'interno del codice jacks e funziona perfettamente, apprezzo il tuo contributo su questo. – mally

Problemi correlati