2012-09-05 9 views
9

Problema

que estoy tratando de mostrar una página al azar de un archivo llamado ../health/ En este archivo hay un archivo index.php y 118 otra archivos llamados archivos php. Me gustaría mostrar aleatoriamente un archivo de la carpeta de estado, pero me gustaría que excluya el archivo index.php.código PHP para excluir el uso de index.php pegote

Este código siguiente incluye el archivo index.php a veces. También he intentado modificar la línea $ exclude para mostrar ../health/index.php pero todavía no tuve suerte.

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

Otro código que he probado es el siguiente

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

Este código también incluye el archivo index.php, pero en lugar de mostrar la página que muestra la página como un error.

+0

He editado su pregunta para eliminar la respuesta (solución) que ha agregado. Como usted es nuevo en SO, la forma en que funciona es que elige una respuesta que mejor resolvió su problema y usted lo acepta haciendo clic en la marca de verificación al lado. –

Respuesta

15

El primero que me vino a la mente es array_filter(), en realidad era preg_grep(), pero eso no importa:

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

Con preg_grep() usando PREG_GREP_INVERT para excluir el patrón:

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

Evita tener que usar una devolución de llamada, aunque es probable que tenga el mismo rendimiento

actualización

El código completo que se debe trabajar para su caso particular:

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

+1 por la mención de 'preg_grep()' –

+0

Hola, gracias por su respuesta, pero soy un poco nuevo en php y sigo aprendiendo los conceptos básicos, ¿dónde encaja su código en mi código? Muchas gracias mally – mally

+0

@ user1649416 He actualizado la respuesta, creo que tendrá más sentido ahora :) –

4

Para complementan la respuesta de Jack, con preg_grep() también se puede hacer:

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

Esto devolverá una matriz con todos los archivos que NO coinciden con index.php directamente. Así es como podría invertir la búsqueda de index.php sin la bandera PREG_GREP_INVERT.

+0

Hola, gracias por tu respuesta, de hecho usé tu código dentro del código de Jacks y funciono perfectamente, agradezco tu opinión sobre esto. – mally

Cuestiones relacionadas