PHP-搜索和替换,然后排序和回显


PHP - search and replace then sort and echo

我已经成功地(好吧,stackoverflow已经向我展示了如何)搜索服务器上的目录以及echo和image。问题是文件夹中的图像由IP摄像机yy_mm_dd_hh_mm命名,其中dd(和其他日期数字)有一个或两个数字。我需要它们有一个前零,这样我就不会最终得到,例如,上午9:50拍摄的图像被视为比最近上午10:05拍摄的照片更高的值。(我希望它将其视为09_50和10_05来解决问题)。

我已经研究过搜索和替换,但无法在我当前的代码中使用:

function webcam_image () {
foreach (glob( "../camera/IPC_IPCamera*.jpg") as $f ) {
$list[] = $f;
}
sort($list);
echo array_pop($list);   
}

示例文件=IPC_IPCamera_13_7_24_9_57_45.jpg

任何帮助都将不胜感激!

感谢

Ali

我会完全忽略文件名,并使用DirectoryIterator,获取文件的实际修改日期。像这样的事情可能会奏效。

$files = array();
$iterator = new 'DirectoryIterator('/path/to/dir');
foreach ($iterator as $file) {
  if(! $file->isDot()) $files[$file->getMTime()] = $file->getFilename();
}
ksort($files);
print_r($files);

查看此处了解更多信息:http://php.net/manual/en/class.directoryiterator.php

如果我理解正确,您可以通过preg_replace处理文件来处理此问题。

因此,您可以循环浏览您的文件并执行以下

$newFilename = preg_replace('/_([0-9])_/', '_0$1_', $oldFilename);
rename($oldFilename, $newFilename);

您可以尝试以下操作:

function webcam_image () {
    foreach (glob( "../camera/IPC_IPCamera*.jpg") as $f ) {
        $digits = explode('_', substr(substr($f, 13), 0, -4));
        foreach($digits as &$digit){
            $digit = sprintf("%02d", $digit);
        }
        unset($digit);
        $list[] = 'IPC_IPCamera_' . implode('_', $digits) . '.jpg';
    }
    sort($list);
    echo array_pop($list);   
}

您可以使用sprintf()

$list[] = $f;

具有以下

$list[] = sprintf("%02s", $f);