PHP: How to compare two strings case-insensitively

Updated: January 9, 2024 By: Guest Contributor Post a comment

Overview

Comparing strings case-insensitively in PHP is crucial when case differences should not affect the comparison results. This tutorial explores various techniques and functions to achieve this.

String comparison is a common task in web development, and performing case-insensitive comparison ensures a more flexible and user-friendly approach. PHP offers several built-in functions to efficiently perform this task, which we will examine in this guide.

Using strcasecmp()

The most straightforward way to compare two strings case-insensitively in PHP is using the built-in function strcasecmp(). It takes two strings as arguments and returns 0 if they are equal, a negative number if str1 is less than str2, or a positive number if str1 is greater than str2, all in a case-insensitive manner.

$string1 = "Hello World";
$string2 = "hello world";
if (strcasecmp($string1, $string2) == 0) {
    echo "The strings are equivalent.";
} else {
    echo "The strings are not equivalent.";
}

IgnoreCase with strcmp() and strtolower()

You can also perform a case-insensitive comparison by converting both strings to the same case using strtolower() or strtoupper() and then using strcmp().

$string1 = "Hello World";
$string2 = "hello world";
if (strcmp(strtolower($string1), strtolower($string2)) == 0) {
    echo "The strings are equivalent.";
} else {
    echo "The strings are not equivalent.";
}

Custom Case-Insensitive Comparison

Sometimes you may need a custom comparison function, for instance, if you are comparing strings with multi-byte characters. Here is how you can use the multi-byte string function mb_strtolower() in conjunction with strcmp().

$string1 = "FÜßball";
$string2 = "fußball";
if (strcmp(mb_strtolower($string1, 'UTF-8'), mb_strtolower($string2, 'UTF-8')) == 0) {
    echo "The strings are equivalent.";
} else {
    echo "The strings are not equivalent.";
}

Using mb_strcasecmp()

For multi-byte support, PHP’s mb_strcasecmp() function is the go-to solution for case-insensitive string comparison, as it respects character encoding.

$string1 = "Étude";
$string2 = "étude";
if (mb_strcasecmp($string1, $string2, 'UTF-8') == 0) {
    echo "The strings are equivalent.";
} else {
    echo "The strings are not equivalent.";
}

Regular Expressions with preg_match()

Another advanced option for case-insensitive string comparison involves the use of regular expressions with the preg_match() function by including the ‘i’ modifier for case insensitivity.

$string1 = "Hello World";
$pattern = '/^hello world$/i';
if (preg_match($pattern, $string1)) {
    echo "The string matches the pattern.";
} else {
    echo "The string does not match the pattern.";
}

Sorting Arrays with Case-Insensitive String Comparison

When sorting arrays of strings, you can use usort() with a custom comparison function that uses strcasecmp() to sort the array case-insensitively.

$array = ["banana", "Apple", "Cherry"];
usort($array, 'strcasecmp');
print_r($array);

Performance Considerations

When dealing with large strings or a high number of comparisons, it’s important to consider the performance differences between these methods. Functions like mb_strcasecmp() can be more resource-intensive than strcasecmp(). Additionally, using regular expressions can be slower than built-in string comparison functions for simple equality checks.

Conclusion

In this tutorial, we’ve explored a variety of methods to compare two strings case-insensitively in PHP. Whether you are dealing with simple ASCII strings or require multi-byte support, PHP offers functions to fulfill your needs. Utilizing the correct function is not just a matter of preference but also performance and efficiency.