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) {
...