由于Bitbucket API没有提供获取仓库最新标签的方法,因此我不得不从所有标签的数组中获取它。
你怎么做呢?
我尝试过max,但它对某些数字无效,例如:
max(['1.0.8', '1.0.9', '1.0.10']);
返回“1.0.9”。
我知道标签只有三个数字,格式为a.b.c
,不会有其他semver所接受的字符串,比如alpha等,因为我们对仓库的标签处理方式如此。
那么你该怎么做呢?
$versions = ['1.0.8', '1.0.9', '1.0.10'];
usort($versions, 'version_compare');
echo end($versions);
请参考http://php.net/version_compare
如果您不想修改该数组:
echo array_reduce($versions, function ($highest, $current) {
return version_compare($highest, $current, '>') ? $highest : $current;
});
version_compare
函数:function maxVersion($array)
{
$max = null;
foreach ($array as $version) {
if (version_compare($max, $version) === -1) {
$max = $version;
}
}
return $max;
}
print(maxVersion(['1.0.8', '1.0.9', '1.0.10']));
// returns "1.0.10"
因为你在这里处理的是字符串而不是数字,所以你将无法得到所需的结果。你可以尝试以下方法:
$version_numbers = str_replace(".","",['1.0.8', '1.0.9', '1.0.10']);
$max = max($version_numbers);
如果您一直在处理固定的a.b.c结构,那么通过替换小数点,您将得到一系列整数,这将让您相对容易地确定最大值。
1010
是这三个数中的最大值时,您会返回什么?1010
吗?您将如何将其转换为1.0.10
? - Hanky Panky