0

以下のコードは、指定されたフォルダーからすべてのphpファイルを選択し、それらをシャッフルして、ページに10個の結果をエコーし​​ます。フォルダーには、結果から除外したいindex.phpファイルが含まれています。

<?php 

if ($handle = opendir('../folder/')) {
    $fileTab = array();
    while (false !== ($file = readdir($handle))) {
        if ($file != "." && $file != "..") {
            $fileTab[] = $file;
        }
    }
    closedir($handle);
    shuffle($fileTab);
    foreach(array_slice($fileTab, 0, 10) as $file) {
        $title = str_replace('-', ' ', pathinfo($file, PATHINFO_FILENAME));
        $thelist .= '<p><a href="../folder/'.$file.'">'.$title.'</a></p>';
    }
}
?>
<?=$thelist?>

index.phpを除外するコードを見つけましたが、上記のコードに組み込む方法がわかりません。

<?php
$random = array_values( preg_grep( '/^((?!index.php).)*$/', glob("../folder/*.php") ) );
$answer = $random[mt_rand(0, count($random) -1)];
include ($answer);
?> 
4

7 に答える 7

2

行を変更してみませんか

if ($file != "." && $file != "..") {

if ($file != "." && $file != ".." && $file != 'index.php') {
于 2013-01-20T20:34:35.170 に答える
1

readdir() の代わりに glob() に基づくアプローチ:

<?php 
$files = glob('../folder/*.php');
shuffle($files);
$selection = array_slice($files, 0, 11);

foreach ($selection as $file) {
    $file = basename($file);
    if ($file == 'index.php') continue;

    $title = str_replace('-', ' ', pathinfo($file, PATHINFO_FILENAME));
    // ...
}
于 2013-01-20T20:37:30.787 に答える
1

使用できます

$it = new FilesystemIterator(__DIR__, FilesystemIterator::SKIP_DOTS);
$it = new RegexIterator($it, '/.php$/i', RegexIterator::MATCH);
$exclude = array("index.php");
foreach ( $it as $splFileInfo ) {
    if (in_array($splFileInfo->getBasename(), $exclude))
        continue;

    // Do other stuff
}

または単に

$files = array_filter(glob(__DIR__ . "/*.php"), function ($v) {
    return false === strpos($v, 'index.php');
});
于 2013-01-20T20:38:54.923 に答える
0

ディレクトリの内容を読んでいる間、それを除外することができます ('.' や '..' で行うように):

if ($handle = opendir('../folder/')) {
    $fileTab = array();
    while (false !== ($file = readdir($handle))) {
        if ($file != "." && $file != ".." && $file != "index.php") {
            $fileTab[] = $file;
        }
    }
    closedir($handle);
    shuffle($fileTab);
    foreach(array_slice($fileTab, 0, 10) as $file) {
        $title = str_replace('-', ' ', pathinfo($file, PATHINFO_FILENAME));
        $thelist .= '<p><a href="../folder/'.$file.'">'.$title.'</a></p>';
    }
}
?>
于 2013-01-20T20:35:37.313 に答える
0
while (false !== ($file = readdir($handle)))
{
    if ($file != "." && $file != ".." && $file != 'index.php')
        $fileTab[] = $file;
}
于 2013-01-20T20:36:46.110 に答える
0

if ($file != "." && $file != "..") {この行を次のように変更できますif ($file != "." && $file != ".." && $file != 'index.php') {

于 2013-01-20T20:36:49.257 に答える
0

見つけたコードは、面倒なディレクトリ読み取りループを置き換えます。

そして、それはちょうどあるべきです:

 $files = preg_grep('~/index\.php$~', glob("../folder/*.php"), PREG_GREP_INVERT);

前と同じように 10 個の要素を取得します。

 $files = array_slice($files, 0, 10);

次に、それらを出力します。

于 2013-01-20T20:44:32.863 に答える