PHP 不区分大小写的in_array函数

2022-08-30 06:46:00

使用该函数时是否可以进行不区分大小写的比较?in_array

因此,对于如下所示的源数组:

$a= array(
 'one',
 'two',
 'three',
 'four'
);

以下查找将全部返回 true:

in_array('one', $a);
in_array('two', $a);
in_array('ONE', $a);
in_array('fOUr', $a);

什么函数或函数集会做同样的事情?我不认为自己能做到这一点。in_array


答案 1

显而易见的事情就是将搜索词转换为小写:

if (in_array(strtolower($word), $array)) { 
  ...

当然,如果数组中有大写字母,则需要先执行此操作:

$search_array = array_map('strtolower', $array);

并搜索它。在每次搜索时对整个数组执行操作是没有意义的。strtolower

但是,搜索数组是线性的。如果你有一个大数组,或者你要经常这样做,最好将搜索词放在数组的键中,因为这将更快地访问:

$search_array = array_combine(array_map('strtolower', $a), $a);

然后

if ($search_array[strtolower($word)]) { 
  ...

这里唯一的问题是数组键必须是唯一的,所以如果你有一个冲突(例如“一”和“一”),你会失去除一个之外的所有键。


答案 2
function in_arrayi($needle, $haystack) {
    return in_array(strtolower($needle), array_map('strtolower', $haystack));
}

文档