2014-07-11 131 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