我正在尝试从名为../health/的文件中显示随机页面 在这个文件中有一个index.php文件和118个其他名为php files的文件。 我想从health文件夹中随机显示一个文件,但我希望它能排除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);
?>
此代码还包含index.php文件,而不是显示将页面显示为错误的页面。
答案 0 :(得分:17)
首先想到的是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);
答案 1 :(得分:4)
赞美杰克的回答,preg_grep()
你也可以这样做:
$files = array_values( preg_grep( '/^((?!index.php).)*$/', glob("*.php") ) );
这将返回一个包含所有直接与index.php
不匹配的文件的数组。这是您在没有index.php
标记的情况下反转搜索PREG_GREP_INVERT
的方法。
答案 2 :(得分:0)
我的目录文件列表是:
$ee = glob(__DIR__.DIRECTORY_SEPARATOR.'*',GLOB_BRACE);
<块引用>
结果
Array
(
[0] => E:\php prj\goroh bot\bot.php
[1] => E:\php prj\goroh bot\index.php
[2] => E:\php prj\goroh bot\indexOld.php
[3] => E:\php prj\goroh bot\test.php
)
<块引用>
我将代码写入 test.php 并运行它
像这样使用 glob:
$ee = glob(__DIR__.DIRECTORY_SEPARATOR.'[!{index}]*',GLOB_BRACE);
print_r($ee);
用于排除以index
开头的文件和目录名称 <块引用>结果
(
[0] => E:\php prj\goroh bot\bot.php
[1] => E:\php prj\goroh bot\test.php
)
<块引用>
排除文件名以旧
结尾$ee = glob(__DIR__.DIRECTORY_SEPARATOR.'*[!{Old}].*',GLOB_BRACE);
print_r($ee);
<块引用>
结果
Array
(
[0] => E:\php prj\goroh bot\bot.php
[1] => E:\php prj\goroh bot\index.php
[2] => E:\php prj\goroh bot\test.php
)
<块引用>
为你这个代码工作我在 php 8.0 中测试 排除文件 index.php
$ee = glob(__DIR__.DIRECTORY_SEPARATOR.'*[!{index}].php',GLOB_BRACE);
print_r($ee);