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

时间:2013-07-24 11:42:51

标签: php search 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

任何帮助都会非常感激!

由于

阿里

4 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

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

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

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

rename($oldFilename, $newFilename);

答案 2 :(得分: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);   
}

答案 3 :(得分:0)

您可以使用sprintf()

$list[] = $f;

以下

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