Я пытаюсь отобразить случайную страницу из файла с именем ./health/. В этом файле есть файл index.php и 118 других файлов с именами php-файлов. Я хотел бы случайно отобразить файл из папки работоспособности, но я бы хотел, чтобы он исключил файл index.php.
Этот следующий код иногда включает файл 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); ?>
с<?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, но вместо того, чтобы показывать страницу, он отображает страницу как ошибку.
Первое, что пришло в голову, это 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);
Он избегает использования обратного вызова, хотя практически он, вероятно, будет иметь одинаковую производительность
Обновить
Полный код, который должен работать для вашего конкретного случая:
$health = preg_grep('/index\.php$/', glob('../health/*.php'), PREG_GREP_INVERT); $whathealth = $health[mt_rand(0, count($health) -1)]; include ($whathealth);
Чтобы ответить на ответ Джека, с помощью preg_grep()
вы также можете:
$files = array_values( preg_grep( '/^((?!index.php).)*$/', glob("*.php") ) );
Это вернет массив со всеми файлами, которые НЕ соответствуют index.php
напрямую. Так вы можете инвертировать поиск index.php
без флага PREG_GREP_INVERT
.