PHP代码使用glob排除index.php

时间:2012-09-05 14:50:29

标签: php arrays glob

问题

我正在尝试从名为../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文件,而不是显示将页面显示为错误的页面。

3 个答案:

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