συναρτήσεις startsWith() και endsWith() στην PHP

Πώς μπορώ να γράψω δύο συναρτήσεις που θα παίρνουν μια συμβολοσειρά και θα επιστρέφουν αν αρχίζει με τον καθορισμένο χαρακτήρα/συμβολοσειρά ή αν τελειώνει με αυτήν;

Για παράδειγμα:

$str = '|apples}';

echo startsWith($str, '|'); //Returns true
echo endsWith($str, '}'); //Returns true
Λύση
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);
}

Χρησιμοποιήστε αυτό αν δεν θέλετε να χρησιμοποιήσετε ένα regex.

Σχόλια (31)

Όλες οι απαντήσεις μέχρι στιγμής φαίνεται να κάνουν ένα σωρό περιττές εργασίες, υπολογισμούς strlen, κατανομές συμβολοσειρών (substr), κλπ. Οι συναρτήσεις 'strpos' και 'stripos' επιστρέφουν το δείκτη της πρώτης εμφάνισης του $needle στο $haystack:

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;
}
Σχόλια (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);
}

Πίστωση σε:

Έλεγχος αν μια συμβολοσειρά τελειώνει με μια άλλη συμβολοσειρά

Έλεγχος αν μια συμβολοσειρά αρχίζει με μια άλλη συμβολοσειρά

Σχόλια (3)