0

我已经设法(好吧,stackoverflow 向我展示了如何)在我的服务器上搜索目录并回显和图像。问题是文件夹中的图像由 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

任何帮助将非常感激!

谢谢

阿里

4

4 回答 4

1

我会完全忽略文件名并使用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

于 2013-07-24T11:56:59.483 回答
1

如果我对你的理解正确,你可以通过preg_replaceing 文件来处理这个问题。

因此,您可以遍历文件并执行以下操作

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

rename($oldFilename, $newFilename);
于 2013-07-24T11:58:18.423 回答
0

您可以尝试以下方法:

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);   
}
于 2013-07-24T11:56:49.717 回答
0

您可以使用 sprintf()

$list[] = $f;

与以下

$list[] = sprintf("%02s", $f);
于 2013-07-24T11:57:35.047 回答