-1

以下のように、YearMonthDay Time の形式のディレクトリにファイルのリストがあります。

20080508-120801suggestions.sql
20090508-120737categories.sql
20100508-120737articlelikes.sql
20110508-120737article.sql
20120508-120737comments.sql
20120508-120737loginusers.sql
20120508-120737popsearch.sql
20120508-120737suggestions.sql
20120508-120801article.sql

PHP で年単位で 1 つの項目を表示し、それを展開すると、月単位で 1 つの項目が表示され、さらにその日で 1 つの項目が表示され、その日に利用可能なすべてのバックアップが表示されます。

最初のビットは、すべての一意の年を一覧表示するところまで完了しており、次にどこに行くべきか分からないほど長い間コードを見つめていました。

変数 year を URL に渡しているので、必要に応じてコードの一部としてそれを取得できます。

if ($handle = opendir($_SERVER['DOCUMENT_ROOT'] . 'sqlbackup/')) 
{
    while (false !== ($entry = readdir($handle))) 
    {
        $isYearfound = 'false';
        //$dirlist = array();
        if (($entry != ".") AND ($entry != ".."))
        {
            foreach ($dirarray as $dirarrayyear)
            {
                if (substr($entry, 0, 4) == $dirarrayyear)
                {
                    $isYearfound = 'true';
                }
            }
            if ($isYearfound == 'false')
            {
                $dirarray[] = substr($entry, 0, 4);
                Print "<a href='myknowledge.php?mnpage=managedb&date=" . substr($entry, 0, 4) . "'>" . substr($entry, 0, 4) . "</a><br/>";
            }
            //Print $entry . "<br/>";
        }
    }
    closedir($handle);
}
4

4 に答える 4

0

したがって、最初の部分は正常に見えます。ただし、コードでファイル名の最初の6文字を比較し、生成されたURLに対して8文字全体を渡すように、URLで年と月を渡すことをお勧めします。

first pass date=2008
second pass date=200805
third pass date=20080501
于 2012-05-08T16:19:00.557 に答える
0

こんにちはフォーム私が一ヶ月中見ているものは05あなたが失望した結果を得ないようにするためです...私は私のデモで日付を変更し、私はこれを手に入れました

$dir = new DirectoryIterator('PATH_TO_SQL_DIR');
$list = array();
foreach($dir as $file)
{
    if($file->isDot())
        continue;

    list($prifix,$surfix) = explode("-", $file->getFilename(),2);
    $date = DateTime::createFromFormat("Ymd", $prifix);
    $year = $date->format("Y");
    $month = $date->format("M");

    if(!isset($list[$year]))
    {
        $list[$year] = array();
    }

    if(!in_array($month, $list[$year]))
    {
        $list[$year][] = $month;
    }
}

echo "<pre>" ;
print_r($list);

出力

Array
(
    [2008] => Array
        (
            [0] => May
            [1] => Dec
        )

    [2009] => Array
        (
            [0] => May
        )

    [2010] => Array
        (
            [0] => May
        )

    [2011] => Array
        (
            [0] => May
        )

    [2012] => Array
        (
            [0] => Jan
            [1] => Feb
            [2] => May
            [3] => Dec
        )

)

これを使用して、必要な種類のリンクを構築することはできません...

于 2012-05-08T16:21:28.230 に答える
0

Baba さん、ご協力ありがとうございました。これは、問題を解決するために最後に使用したコードです。

$dir = new DirectoryIterator($_SERVER['DOCUMENT_ROOT'] . 'sqlbackup/');
$list = array();
foreach($dir as $file)
{
    if($file->isDot())
    continue;

    list($prifix,$surfix) = explode("-", $file->getFilename(),2);
    $date = DateTime::createFromFormat("Ymd", $prifix);
    $year = $date->format("Y");
    $month = $date->format("m");
    $day = $date->format("d");

    if(!isset($list[$year]))
    {
        $list[$year] = array();
    }
    if(!in_array($day, $list[$year][$month][$day]))
    {
        $list[$year][$month][$day] = $day;
    }
}
echo "<pre>" ;

foreach (array_keys($list) as $value)
{
    Print "<a href='myknowledge.php?mnpage=managedb&date=" . $value . "'>" . $value . "</a><br/>";
    if ($value == substr($_GET['date'], 0, 4))
    {
            foreach (array_keys($list[$value]) as $value2)
            {
            Print "&nbsp;&nbsp;&nbsp;&nbsp;<a href='myknowledge.php?mnpage=managedb&date=" . $value . $value2 ."'>" . $value2 . "</a></br/>";
            }
    }
}                               
//print_r($list);
于 2012-05-09T09:08:06.370 に答える
0

私はあなたのためにスクリプトを作成しました。再帰的ではありませんが、あなたが望むことはできると思いますし、再帰的にする必要はまったくありません。ディレクトリ パス/スクリプト名などを自分のものに変更してください。

$dir = scandir('myfiles');
$prevyear=0;
$prevmonth=0;
$prevday=0;

foreach ($dir as $file) {

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

    if (isset($_GET["year"]) && isset($_GET["month"]) && isset($_GET["day"])) { //if all three is set show file

        if (preg_match('/^'.$_GET["year"].$_GET["month"].$_GET["day"].'/',$file,$match)) {
            echo '<a href="'.$file.'">'.$file.'</a><br />';
        }

    } else if (isset($_GET["year"]) && isset($_GET["month"])) { //if only year and month set show days
        if (preg_match('/^'.$_GET["year"].$_GET["month"].'/',$file,$match)) {
            $day = preg_replace(array('/^\d{6}/','/\-.*?$/'),'',$file);
            if ($day!=$prevday) {
                echo '<a href="script.php?year='.$_GET["year"].'&month='.$_GET["month"].'&day='.$day.'">' . $day . '</a><br />';
                $prevday=$day;
            }
        }   
    } else if (isset($_GET["year"])) { //if only year set show months
        if (preg_match('/^'.$_GET["year"].'/',$file,$match)) {
            $month = preg_replace(array('/^\d{4}/','/\d{2}\-.*?$/'),'',$file);
            if ($month!=$prevmonth) {
                echo '<a href="script.php?year='.$_GET["year"].'&month='.$month.'">' . $month . '</a><br />';
                $prevmonth=$month;
            }
        }   
    } else { //if nothing set show years
        $year = preg_replace('/\d{4}\-.*?$/','',$file);
        if ($year!=$prevyear) {
            echo '<a href="script.php?year='.$year.'">' . $year . '</a><br />';
            $prevyear=$year;
        }
    }
}

}

于 2012-05-08T17:15:52.867 に答える