2012-09-05 3 views
9

Проблемы

Я пытаюсь показать случайную страницу из файла с именем ../health/ В этом файле есть файл index.php и 118 других файлы с именами php-файлов. Я хотел бы случайным образом отобразить файл из папки работоспособности, но я бы хотел, чтобы он исключил файл index.php.PHP код, чтобы исключить index.php с помощью Glob

Этот код содержит иногда файл index.php. Я также попытался изменить строку $ exclude, чтобы показать ../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

Я отредактировал ваш вопрос, чтобы вырезать ответ (решение), который вы добавили. Поскольку вы новичок в SO, то, как он работает, является то, что вы выбираете ответ, который лучше всего решил вашу проблему, и вы его принимаете нажав галочку рядом с ней. –

ответ

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

Он избегает использования обратного вызова, хотя практически он, вероятно, будет иметь такую ​​же производительность

Update

Полный код, который должен работать для вашего конкретного случая:

$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

Здравствуйте, Спасибо за ваш ответ, но я немного новичок в php и все еще изучаю основы, где ваш код соответствует моему коду. Большое спасибо mally – mally

+0

@ user1649416 Я обновил ответ, я думаю, теперь это будет иметь больше смысла :) –

4

комплимент ответ Джека, с preg_grep() вы также можете сделать:

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

Это вернет массив со всеми файлами, которые НЕ соответствуют index.php. Таким образом, вы можете инвертировать поиск index.php без флага PREG_GREP_INVERT.

+0

Здравствуйте, Спасибо за ваш ответ, я действительно использовал ваш код в коде jacks и отлично работает, я ценю ваш вклад в это. – mally

 Смежные вопросы

  • Нет связанных вопросов^_^