public function matchPackageVersions($availableVersions, $wantedVersion)
    {
        $m = null;
        if (preg_match('/^(\d+(?:\.\d+)*)(?:dev|alpha|a|beta|b|rc)/i', $wantedVersion, $m)) {
            $wantedVersionBase = $m[1];
        } else {
            $wantedVersionBase = $wantedVersion;
        }
        $wantedVersionComparable = preg_replace('/^(.*?\d)(\.0+)+$/', '\1', $wantedVersionBase);
        $result = null;
        $availableVersions = $this->sortPackageVersions($availableVersions, false);
        foreach ($availableVersions as $availableVersion) {
            if ($result === null) {
                $result = $availableVersion;
            }
            if (strpos($availableVersion, PackageVersionEntity::DEV_PREFIX) === 0) {
                $availableVersionBase = substr($availableVersion, strlen(PackageVersionEntity::DEV_PREFIX));
                $availableVersionIsDev = true;
            } else {
                $availableVersionBase = $availableVersion;
                $availableVersionIsDev = false;
            }
            $availableVersionComparable = preg_replace('/^(.*?\d)(\.0+)+$/', '\1', $availableVersionBase);
            if ($availableVersionIsDev) {
                $availableVersionIsDev .= str_repeat('.' . PHP_INT_MAX, 6);
            }
            $cmp = version_compare($availableVersionComparable, $wantedVersionComparable);
            if ($cmp > 0) {
                if ($availableVersionIsDev && strpos($availableVersionBase . '.', $wantedVersionBase . '.') === 0) {
                    $result = $availableVersion;
                }
                break;
            }
            $result = $availableVersion;
            if ($cmp === 0) {
                break;
            }
        }

        return $result;
    }
public function matchPackageVersions($availableVersions, $wantedVersion)
    {
        $m = null;
        if (preg_match('/^(\d+(?:\.\d+)*)(?:dev|alpha|a|beta|b|rc)/i', $wantedVersion, $m)) {
            $wantedVersionBase = $m[1];
        } else {
            $wantedVersionBase = $wantedVersion;
        }
        $wantedVersionComparable = preg_replace('/^(.*?\d)(\.0+)+$/', '\1', $wantedVersionBase);
        $result = null;
        $availableVersions = $this->sortPackageVersions($availableVersions, false);
        foreach ($availableVersions as $availableVersion) {
            if ($result === null) {
                $result = $availableVersion;
            }
            if (strpos($availableVersion, PackageVersionEntity::DEV_PREFIX) === 0) {
                $availableVersionBase = substr($availableVersion, strlen(PackageVersionEntity::DEV_PREFIX));
                $availableVersionIsDev = true;
            } else {
                $availableVersionBase = $availableVersion;
                $availableVersionIsDev = false;
            }
            $availableVersionComparable = preg_replace('/^(.*?\d)(\.0+)+$/', '\1', $availableVersionBase);
            if ($availableVersionIsDev) {
                $availableVersionIsDev .= str_repeat('.' . PHP_INT_MAX, 6);
            }
            $cmp = version_compare($availableVersionComparable, $wantedVersionComparable);
            if ($cmp > 0) {
                if ($availableVersionIsDev && strpos($availableVersionBase . '.', $wantedVersionBase . '.') === 0) {
                    $result = $availableVersion;
                }
                break;
            }
            $result = $availableVersion;
            if ($cmp === 0) {
                break;
            }
        }

        return $result;
    }
public function matchPackageVersions ( $ availableVersions , $ wantedVersion ) { $ m = null ; if ( preg_match ( '/^(\d+(?:\.\d+)*)(?:dev|alpha|a|beta|b|rc)/i' , $ wantedVersion , $ m ) ) { $ wantedVersionBase = $ m [ 1 ] ; } else { $ wantedVersionBase = $ wantedVersion ; } $ wantedVersionComparable = preg_replace ( '/^(.*?\d)(\.0+)+$/' , '\1' , $ wantedVersionBase ) ; $ result = null ; $ availableVersions = $ this -> sortPackageVersions ( $ availableVersions , false ) ; foreach ( $ availableVersions as $ availableVersion ) { if ( $ result === null ) { $ result = $ availableVersion ; } if ( strpos ( $ availableVersion , PackageVersionEntity :: DEV_PREFIX ) === 0 ) { $ availableVersionBase = substr ( $ availableVersion , strlen ( PackageVersionEntity :: DEV_PREFIX ) ) ; $ availableVersionIsDev = true ; } else { $ availableVersionBase = $ availableVersion ; $ availableVersionIsDev = false ; } $ availableVersionComparable = preg_replace ( '/^(.*?\d)(\.0+)+$/' , '\1' , $ availableVersionBase ) ; if ( $ availableVersionIsDev ) { $ availableVersionIsDev .= str_repeat ( '.' . PHP_INT_MAX , 6 ) ; } $ cmp = version_compare ( $ availableVersionComparable , $ wantedVersionComparable ) ; if ( $ cmp > 0 ) { if ( $ availableVersionIsDev && strpos ( $ availableVersionBase . '.' , $ wantedVersionBase . '.' ) === 0 ) { $ result = $ availableVersion ; } break ; } $ result = $ availableVersion ; if ( $ cmp === 0 ) { break ; } } return $ result ; }
Guess the best package version entity corresponding to a list of versions.

@param string[] $availableVersions
@param string $wantedVersion

@return string|null Returns null if $availableVersions is empty, a version otherwise
Guess the best package version entity corresponding to a list of versions .