배열은 문자열 만 포함 할 수 있지만 배열은 다른 배열도 포함 할 수 있다고 가정하면 위의 내용이 정확합니다. 또한 in_array () 함수는 $ needle에 대한 배열을 허용 할 수 있으므로 $ needle이 배열이고 $ haystack에 다른 것이 포함되어 있으면 array_map ( 'strtolower', $ haystack)이 작동하지 않으면 strtolower ($ needle)가 작동하지 않습니다 "PHP 경고 : strtolower ()는 매개 변수 1이 문자열이며 배열이 주어질 것으로 예상합니다."
예:
$needle = array('p', 'H');
$haystack = array(array('p', 'H'), 'U');
그래서 대소 문자를 구분하고 대소 문자를 구분하지 않는 in_array () 검사를하기 위해 관련 메소드를 사용하여 도우미 클래스를 만들었습니다. strtolower () 대신 mb_strtolower ()를 사용하고 있으므로 다른 인코딩을 사용할 수 있습니다. 코드는 다음과 같습니다.
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;
}
}
}