İlk önce, sürümleri büyük sürümle gruplandırmalısınız. Bundan sonra sadece azalan bir şekilde version_compare
işlevini kullanarak sonuçlandı sıralamak gerekiyor ve her grubun ilk elemanını döndürmek için:
$versions = array("3.0.3", "3.0.2", "3.0.1", "3.0.0", "2.9.5", "2.9.4",
"2.9.3", "2.9.2", "2.9.1", "2.9.0", "2.8.11", "2.8.10", "2.8.9"
);
$groupedVersions = array();
foreach ($versions as $version) {
preg_match('/^\d+\.\d+/', $version, $majorVersion);
if (!isset($groupedVersions[$majorVersion[0]])) {
$groupedVersions[$majorVersion[0]] = array($version);
} else {
$groupedVersions[$majorVersion[0]][] = $version;
}
}
$groupedVersions = array_map(function ($versions) {
usort($versions, 'version_compare');
return array_reverse($versions);
}, $groupedVersions);
$latestVersions = array_reduce($groupedVersions, function ($carry, $versions) {
$carry[] = $versions[0];
return $carry;
}, array());
echo '<pre>';
var_dump($latestVersions);
echo '</pre>';
sonuç şöyle olacaktır:
array(3) {
[0]=>
string(5) "3.0.3"
[1]=>
string(5) "2.9.5"
[2]=>
string(6) "2.8.11"
}
Gerçekten beyin tarayıcıları gibi. Şimdiden bir şey denediğini bekliyoruz, bir şey denediniz mi? – izk
Bu işlev size yardımcı olabilir: http://php.net/manual/en/function.explode.php – Reversal
Evet Bunu anlamaya çalışıyorum. İlk önce ilk iki değeri elde etmeye çalışıyordum ve sonra onu karşılaştırdım, ama bunu yapamam. foreach ($ dizisi $ anahtar => $ değer) { $ test = substr ($ değer, 0, 3); $ a = strtr ($ değer, dizi ('.' => '', ',' => '')); $ b = (int) $ a; $ c = substr ($ b, 0, 2); $ new_array = array ($ c); $ sonuç = array_unique ($ new_array); print_object ($ sonuç); } – user2450639