2014-07-11 95 views
1

让我们来直奔我的问题,这些都是我的文件夹:查找最新版本的文件夹

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 
) 

现在即时寻找...时间...可能是glob到只有sel的正则表达式等最新的文件夹。

实际上所有的东西我已经插入作为第一个参数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

+0

不错!!! :D如果你做了一个后投不适当的投票并接受它:D – Dwza

+0

好吧,我想没有一个真正的单行解决方案。 thx给所有的帮手,祝你周末愉快。 – Dwza

+1

+1有一个愉快的周末 –

回答

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版本遵循一个兼容的约定,该函数期望什么。

+0

好,从未见过或使用过这个功能之前+1 –

+0

看起来不错,但是......它不是一行代码:D不想创建一个额外的功能。 – Dwza

+0

@Dwza“创建额外功能”...?!这与您“达到一行代码”的距离相近。有些问题根本无法用一行代码正确解决。 – deceze