查找最新版本的文件夹

时间:2014-07-11 15:24:51

标签: php

让我们直接回答我的问题,这些是我的文件夹:

Smarty-3.1.13
Smarty-3.1.15
Smarty-3.1.16
Smarty-3.1.19

这就是我得到foldernames的方式

$smarty_versions = glob("php/Smarty-*");

结果:

Array
(
    [0] => php/Smarty-3.1.13
    [1] => php/Smarty-3.1.15
    [2] => php/Smarty-3.1.16
    [3] => php/Smarty-3.1.19
)

现在我正在寻找... em ...可能是 glob 的正则​​表达式,只能选择最新的文件夹。

实际上我作为第一个参数插入到golb看起来像regexp失败的所有东西:)有一种方法所以得到这样的最后一个文件夹?

或者我这样做......

$smarty_versions = glob("php/Smarty-*");
$latest_smarty_version = $smarty_versions[count($smarty_versions)-1]; 
//works but i like it more tiny if possible :)

也许你们知道其他一线解决方案:D

1 个答案:

答案 0 :(得分:3)

要使用正确的版本字符串比较,您应该使用version_compare

$latest = array_reduce($smarty_versions, function ($latest, $folder) {
    if (!$latest) {
        return $folder;
    }
    $latestNum = preg_replace('!^php/Smarty-!', '', $latest);
    $folderNum = preg_replace('!^php/Smarty-!', '', $folder);

    return version_compare($latestNum, $folderNum, '>') ? $latest : $folder;
});

当然假设Smarty版本遵循与该函数所期望的兼容约定。