-2

IP アドレスと unix TS を含むファイルのリストがあります。ファイルの重複排除されたリストを取得する必要がありますが、そのホストの最新のもののみが必要です (これは、ファイルの実際の ts ではなく、ファイル名の unix ts に基づく必要があります)。

サンプルデータ:

192.168.1.6_1352405854.xml  192.168.1.6_1352408700.xml  192.168.1.6_1352409088.xml   192.168.189.14_1352409088.xml
192.168.1.6_1352407188.xml  192.168.1.6_1352408715.xml  192.168.1.6_1352409520.xml   192.168.189.14_1352409520.xml
192.168.1.6_1352407248.xml  192.168.1.6_1352408796.xml  192.168.1.6_1352409601.xml   192.168.189.14_1352409601.xml
192.168.1.6_1352407311.xml  192.168.1.6_1352408830.xml  192.168.1.6_1352412001.xml   192.168.189.14_1352412001.xml
192.168.1.6_1352407329.xml  192.168.1.6_1352408907.xml  192.168.1.6_1352415602.xml   192.168.189.14_1352415602.xml
192.168.1.6_1352408608.xml  192.168.1.6_1352409018.xml  192.168.189.14_1352409018.xml

したがって、期待される結果は、各 IP からの最新のファイルのみをリストするファイル名の配列になります。

何かのようなもの:

192.168.1.6_1352415602.xml

192.168.1.14_1352415602.xml

私のコードでは、ディレクトリ構造をループして、ファイル名とディレクトリをプルする必要があります。

ディレクトリは、左側のメニューを構成するサイト名になります。

ファイルは、ハイパーリンクされたホスト名としてこれらのメニュー項目の下にあります(ただし、各ホストからの最新のファイル情報のみが必要です)

// Get directory list and (natural) sort it alphabetically (ignoring case)
        $glob = "xml/vpnm/*";
        $dirs = glob($glob,GLOB_ONLYDIR);
        foreach ($dirs as $d){
            $tmp[basename($d)] = basename($d);
        }
        natcasesort($tmp);
        $dirs = array_keys($tmp);
        foreach($dirs as $dir){
            $dir = basename($dir);
            $sitename = preg_replace('/_/', ' ', $dir);
            echo "<h3><a href='#'>$sitename</a></h3>";
            echo '<div>';
                // Get list of hosts in the xml/ directory based on the file name
                $year = date("Y");
                $month = date("m");
                $basepath = "xml/vpnm/$dir/$year/$month";
// note - preg_find is an include file, not a php function
 $files = preg_find('/\.xml$/D', "xml/vpnm/$dir", PREG_FIND_RECURSIVE);
                foreach ($files as $f){
                    // echo " F= $f \n";
                    $tmp[basename($f)] = basename($f);
                }
                natcasesort($tmp);
                $files = array_keys($tmp);
                natsort($files);
// do something here to deduplicate and only include the latest files.
foreach($files as $file) {
...
4

1 に答える 1

1
$dirlist = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir));
$results = array();
foreach($dirlist as $file){
    if($file->getExtension() !='xml') continue;
    $parts = explode('_',$file->getBasename());
    if(isset($results[$parts[0]])){
        if($file->getBasename() > $results[$parts[0]]->getBasename()){
            $results[$parts[0]] = $file;
        }
    } else {
        $results[$parts[0]] = $file;
    }
}
于 2012-11-09T00:19:41.303 に答える