PHP'de startsWith() ve endsWith() işlevleri

Bir dizeyi alıp belirtilen karakter/dize ile başlayıp başlamadığını veya bitip bitmediğini döndüren iki işlevi nasıl yazabilirim?

Örneğin:

$str = '|apples}';

echo startsWith($str, '|'); //Returns true
echo endsWith($str, '}'); //Returns true
Çözüm
function startsWith($haystack, $needle)
{
     $length = strlen($needle);
     return (substr($haystack, 0, $length) === $needle);
}

function endsWith($haystack, $needle)
{
    $length = strlen($needle);
    if ($length == 0) {
        return true;
    }

    return (substr($haystack, -$length) === $needle);
}

Eğer bir regex kullanmak istemiyorsanız bunu kullanın.

Yorumlar (31)

Şimdiye kadarki tüm yanıtlar, strlen hesaplamaları, string tahsisleri (substr) gibi bir sürü gereksiz iş yapıyor gibi görünüyor. strpos've'stripos'fonksiyonları$haystackiçinde$needle` kelimesinin ilk geçtiği yerin indeksini döndürür:

function startsWith($haystack,$needle,$case=true)
{
    if ($case)
        return strpos($haystack, $needle, 0) === 0;

    return stripos($haystack, $needle, 0) === 0;
}

function endsWith($haystack,$needle,$case=true)
{
    $expectedPosition = strlen($haystack) - strlen($needle);

    if ($case)
        return strrpos($haystack, $needle, 0) === $expectedPosition;

    return strripos($haystack, $needle, 0) === $expectedPosition;
}
Yorumlar (15)
function startsWith($haystack, $needle, $case = true) {
    if ($case) {
        return (strcmp(substr($haystack, 0, strlen($needle)), $needle) === 0);
    }
    return (strcasecmp(substr($haystack, 0, strlen($needle)), $needle) === 0);
}

function endsWith($haystack, $needle, $case = true) {
    if ($case) {
        return (strcmp(substr($haystack, strlen($haystack) - strlen($needle)), $needle) === 0);
    }
    return (strcasecmp(substr($haystack, strlen($haystack) - strlen($needle)), $needle) === 0);
}

Kredi:

Bir dizenin başka bir dizeyle bitip bitmediğini kontrol edin

Bir dizenin başka bir dizeyle başlayıp başlamadığını kontrol edin

Yorumlar (3)