2016-02-24 14 views
8

Ponieważ interfejs API Bitbucket nie zapewnia metody pobierania najnowszego znacznika dla repozytorium, muszę go pobrać z tablicy wszystkich znaczników.Jak uzyskać najwyższy numer wersji/znacznik w PHP

Jak to zrobić?

Próbowałem już max, ale nie działa dla niektórych numerów, np.

max(['1.0.8', '1.0.9', '1.0.10']); 

zwraca wartość "1.0.9".

Wiem, że znaczniki będą zawsze tylko trzema numerami a.b.c nie będą miały innych łańcuchów akceptowanych przez sember, takich jak alfa itp., Ze względu na sposób, w jaki robimy znaczniki dla naszych repozytoriów.

Jak to zrobić?

Odpowiedz

11
$versions = ['1.0.8', '1.0.9', '1.0.10']; 
usort($versions, 'version_compare'); 
echo end($versions); 

Zobacz http://php.net/version_compare

Jeśli nie masz ochoty na modyfikację tablicy:

echo array_reduce($versions, function ($highest, $current) { 
    return version_compare($highest, $current, '>') ? $highest : $current; 
}); 
+2

Och, ta część [version_compare] (http://php.net/version_compare) jest doskonała 'Jeśli część zawiera specjalne ciągi wersji, są one obsługiwane w następującej kolejności: dowolny ciąg nie znajduje się na tej liście

+0

To zadziwiająco potężne, tak. – deceze

+0

Wow, chłopaki, jesteście szybcy! – mattl

1

Używając version_compare funkcję:

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" 
-1

Ponieważ mamy do czynienia z tekstem tutaj, zamiast liczb, nie uzyskasz wymaganego wyniku. Można spróbować wykonać następujące czynności:

$version_numbers = str_replace(".","",['1.0.8', '1.0.9', '1.0.10']); 
$max = max($version_numbers); 

Jeśli zawsze do czynienia ze stałym abc strukturze następnie poprzez zastąpienie dziesiętny otrzymasz serię liczb, które pozwolą Ci określić maksymalną stosunkowo łatwo

+3

Uhm ... ''10 .1 ',' 1.01'' ... Punkty dziesiętne są w pewnym stopniu znaczące ... – deceze

+0

To jest sprawiedliwy punkt –

+2

Kiedy dowiadujesz się, że' 1010' jest maksymalnym z tych 3, co będzie Ty powracasz? '1010'? Jak to zrobisz '1.0.10' –

Powiązane problemy