1. The list of catalogs at this stage is as follows: v2.0.15-rc.6, v2.0.15-rc.7, v2.0.15, v2.0.16- hotfix.2, v2.0.16-hotfix.3, v2.0.16, v2.0.17-rc.0, v2.0.20. as shown in Figure 1

2. Get all the subdirectories of the given directory and use glob() with the glob_onlydir option.
$directories = glob(module_path('ThemeStoreDB') . '/Resources/setting_migrations' . '/*' , GLOB_ONLYDIR);
print_r($directories);
exit;
3. The printing results are as follows, in line with expectations. as shown in Figure 2

Array
(
[0] => E:\wwwroot\object\Modules/ThemeStoreDB/Resources/setting_migrations/v2.0.15
[1] => E:\wwwroot\object\Modules/ThemeStoreDB/Resources/setting_migrations/v2.0.15-rc.6
[2] => E:\wwwroot\object\Modules/ThemeStoreDB/Resources/setting_migrations/v2.0.15-rc.7
[3] => E:\wwwroot\object\Modules/ThemeStoreDB/Resources/setting_migrations/v2.0.16
[4] => E:\wwwroot\object\Modules/ThemeStoreDB/Resources/setting_migrations/v2.0.16-hotfix.2
[5] => E:\wwwroot\object\Modules/ThemeStoreDB/Resources/setting_migrations/v2.0.16-hotfix.3
[6] => E:\wwwroot\object\Modules/ThemeStoreDB/Resources/setting_migrations/v2.0.17-rc.0
[7] => E:\wwwroot\object\Modules/ThemeStoreDB/Resources/setting_migrations/v2.0.20
)
4. You need to reorder the directory (only get the last level directory). Print the result, as shown in Figure 3

$directories = glob(module_path('ThemeStoreDB') . '/Resources/setting_migrations' . '/*' , GLOB_ONLYDIR);
print_r(array_map(fn($directory): string => pathinfo($directory)['basename'], $directories));
// print_r($directories);
exit;
Array
(
[0] => v2.0.15
[1] => v2.0.15-rc.6
[2] => v2.0.15-rc.7
[3] => v2.0.16
[4] => v2.0.16-hotfix.2
[5] => v2.0.16-hotfix.3
[6] => v2.0.17-rc.0
[7] => v2.0.20
)
5. The directory order is incorrect, USORT — use user-defined comparison functions to sort the values in the array. version_compare — Contrast two “PHP normalized” version numeric strings. Sort as expected. as shown in Figure 4

$directories = glob(module_path('ThemeStoreDB') . '/Resources/setting_migrations' . '/*' , GLOB_ONLYDIR);
$versions = array_map(fn($directory): string => pathinfo($directory)['basename'], $directories);
usort($versions, 'version_compare');
// print_r(array_map(fn($directory): string => pathinfo($directory)['basename'], $directories));
print_r($versions);
exit;
Array
(
[0] => v2.0.15-rc.6
[1] => v2.0.15-rc.7
[2] => v2.0.15
[3] => v2.0.16-hotfix.2
[4] => v2.0.16-hotfix.3
[5] => v2.0.16
[6] => v2.0.17-rc.0
[7] => v2.0.20
)
6. When version v2.0.15 is upgraded to v2.0.17-rc.0 The directory that it needs to execute is: v2.0.16-hotfix.2, v2.0.16-hotfix.3, v2.0.16, v2.0.17-rc.0. Filter first, then sort. The final implementation is as follows. as shown in Figure 5

$directories = glob(module_path('ThemeStoreDB') . '/Resources/setting_migrations' . '/*', GLOB_ONLYDIR);
$versions = array_map(fn($directory): string => pathinfo($directory)['basename'], $directories);
$fromVersion = 'v2.0.15';
$toVersion = 'v2.0.17-rc.0';
$pendingVersions = array_filter($versions, function ($v) use ($fromVersion, $toVersion) {
return version_compare($v, $fromVersion, '>') && version_compare($v, $toVersion, '<=');
});
usort($pendingVersions, 'version_compare');
print_r($pendingVersions);
exit;
Array
(
[0] => v2.0.16-hotfix.2
[1] => v2.0.16-hotfix.3
[2] => v2.0.16
[3] => v2.0.17-rc.0
)
Need long-term technical maintenance or remote troubleshooting?
I am a PHP / Go backend engineer with 15+ years of experience, focused on existing system maintenance, bug fixing, performance optimization, server troubleshooting, WordPress maintenance, and small feature iterations.
If your project is facing any of the following issues, we can start with a small troubleshooting task first:
- ✅ PHP / Laravel / Yii2 legacy systems without active maintenance
- ✅ Go / Gin backend APIs that need troubleshooting or optimization
- ✅ Slow, broken, or unstable WordPress websites
- ✅ Nginx / MySQL / Redis / Linux server issues
- ✅ CDN / Cloudflare / DNS / HTTPS configuration problems
- ✅ Long-term remote technical support or part-time maintenance
More details: About Me & Collaboration
WeChat: 13980074657
Email: shuijingwanwq@gmail.com
Telegram: @shuijingwan
GitHub: https://github.com/shuijingwan

Leave a Reply