Как на PHP скрывать часть текста в зависимости от количества символов?

Как на PHP скрывать часть текста в зависимости от количества символов?

Звездочек должно быть всегда 8!

Если цифр 7 и больше, то отображать 3 первых и 3 последних

Если цифр 5 или 6, то отображать 2 первых и 2 последних

Если цифр 3 или 4, то отображать 1 первую и 1 последнюю

Если цифр 2, то отображать 1 первую

Если цифр 1, то отображать ее и отобразить

$key = "12345678901234567890";      // 123********890
$key = "1123456789012345678232190"; // 112********190
$key = "1145234140";                // 114********140
$key = "103482";                    // 10********82
$key = "534";                       // 5********4
$key = "28";                        // 2********
$key = "7";                         // 7

Еще возможно ее как то коротким кодом сделать, чтобы вставлять в любое место к коде?


Ответы (2 шт):

Автор решения: Mina987

Как вариант, можно использовать данную функцию:

function YourNameFunction($str)
{
    $arr = str_split($str);
    $newstr = "";
    if(count($arr) >= 7) {
        $newstr = $arr[0].$arr[1].$arr[2]."********".$arr[count($arr) - 3].$arr[count($arr) - 2].$arr[count($arr) - 1];
    } elseif(count($arr) >= 5) {
        $newstr = $arr[0].$arr[1]."********".$arr[count($arr) - 2].$arr[count($arr) - 1];
    } elseif(count($arr) >= 3) {
        $newstr = $arr[0]."********".$arr[count($arr) - 1];
    } elseif(count($arr) == 2) {
        $newstr = $arr[0]."********";
    } elseif(count($arr) == 1) {
        $newstr = $arr[0];
    }
    return $newstr;
}

Так-же можно сократить код, чтобы убрать $arr[count($arr) - 3]

Вот более читабельная функция

function YourNameFunction($str)
{
    $arr = str_split($str);
    $newstr = "********";
    
    if(count($arr) > 2) {
        $n = 1;
        if(count($arr) >= 7) {
            $n = 3;
        } elseif(count($arr) >= 5) {
            $n = 2;
        }
        for($i = $n; $i > 0; i--) {
            $newstr = $arr[$i].$newstr.$arr[count($arr) - $i];
        }
    } elseif(count($arr) == 2) {
        $newstr = $arr[0].$newstr;
    } else {
        $newstr = $str;
    }
    return $newstr;
}
→ Ссылка
Автор решения: Алексей Шиманский

Немного улучшенная функция с if'ами

function hideNumber($string, $countFirstNumbersToShow = 1, $countLastNumbersToShow = 1, $countOfStars = 8) {
    return substr($string, 0, $countFirstNumbersToShow) . str_repeat('*', $countOfStars) . ($countLastNumbersToShow === 0 ? '' : substr($string, -$countLastNumbersToShow));
}

function someFunction($string) {
    $stringLength = strlen($string);
    
    if ($stringLength >= 7) {
        $newStr = hideNumber($string, 3, 3);
    } elseif ($stringLength >= 5) {
        $newStr = hideNumber($string, 2, 2);
    } elseif ($stringLength >= 3) {
        $newStr = hideNumber($string, 1, 1);
    } elseif ($stringLength == 2) {
        $newStr = hideNumber($string, 1, 0);
    } elseif ($stringLength == 1) {
        $newStr = hideNumber($string, 1, 0, 0);
    }
    
    return $newStr;
}

UPD Функция someFunction с помощью match (появился в PHP8), а hideNumber без изменений

function someFunction($string) {
    $stringLength = strlen($string);
    
    return match (true) {
        $stringLength >= 7 => hideNumber($string, 3, 3),
        $stringLength >= 5 => hideNumber($string, 2, 2),
        $stringLength >= 3 => hideNumber($string, 1, 1),
        $stringLength === 2 => hideNumber($string, 1, 0),
        $stringLength === 1 => hideNumber($string, 1, 0, 0),
    };
}
→ Ссылка