Trên đây là chính xác nếu chúng ta giả sử rằng các mảng chỉ có thể chứa các chuỗi, nhưng các mảng cũng có thể chứa các mảng khác. Ngoài ra, hàm in_array () có thể chấp nhận một mảng cho $ kim, vì vậy strtolower ($ kim) sẽ không hoạt động nếu $ kim là một mảng và mảng_map ('strtolower', $ haystack) sẽ không hoạt động nếu $ haystack chứa khác mảng, nhưng sẽ dẫn đến "cảnh báo PHP: strtolower () mong muốn tham số 1 là chuỗi, mảng đã cho".
Thí dụ:
$needle = array('p', 'H');
$haystack = array(array('p', 'H'), 'U');
Vì vậy, tôi đã tạo ra một lớp trợ giúp với các phương thức liên quan, để thực hiện kiểm tra in_array () không phân biệt chữ hoa chữ thường và chữ hoa chữ thường. Tôi cũng đang sử dụng mb_strtolower () thay vì strtolower (), vì vậy các bảng mã khác có thể được sử dụng. Đây là mã:
class StringHelper {
public static function toLower($string, $encoding = 'UTF-8')
{
return mb_strtolower($string, $encoding);
}
/**
* Digs into all levels of an array and converts all string values to lowercase
*/
public static function arrayToLower($array)
{
foreach ($array as &$value) {
switch (true) {
case is_string($value):
$value = self::toLower($value);
break;
case is_array($value):
$value = self::arrayToLower($value);
break;
}
}
return $array;
}
/**
* Works like the built-in PHP in_array() function — Checks if a value exists in an array, but
* gives the option to choose how the comparison is done - case-sensitive or case-insensitive
*/
public static function inArray($needle, $haystack, $case = 'case-sensitive', $strict = false)
{
switch ($case) {
default:
case 'case-sensitive':
case 'cs':
return in_array($needle, $haystack, $strict);
break;
case 'case-insensitive':
case 'ci':
if (is_array($needle)) {
return in_array(self::arrayToLower($needle), self::arrayToLower($haystack), $strict);
} else {
return in_array(self::toLower($needle), self::arrayToLower($haystack), $strict);
}
break;
}
}
}