使用该in_array函数时是否可以进行不区分大小写的比较?
所以使用这样的源数组:
$a= array(
'one',
'two',
'three',
'four'
);
Run Code Online (Sandbox Code Playgroud)
以下查找都将返回true:
in_array('one', $a);
in_array('two', $a);
in_array('ONE', $a);
in_array('fOUr', $a);
Run Code Online (Sandbox Code Playgroud)
哪些功能或一组功能可以做同样的事情?我认为in_array自己无法做到这一点.
cle*_*tus 210
显而易见的事情就是将搜索词转换为小写:
if (in_array(strtolower($word), $a) {
...
Run Code Online (Sandbox Code Playgroud)
当然,如果数组中有大写字母,您首先需要这样做:
$search_array = array_map('strtolower', $a);
Run Code Online (Sandbox Code Playgroud)
并搜索.strtolower每次搜索对整个阵列都没有意义.
然而,搜索数组是线性的.如果你有一个大的数组或你打算这样做了很多,这将是更好地把搜索条件在阵列的关键,因为这将是很多快速访问:
$search_array = array_combine(array_map('strtolower', $a), $a);
Run Code Online (Sandbox Code Playgroud)
然后
if ($search_array[strtolower($word)]) {
...
Run Code Online (Sandbox Code Playgroud)
这里唯一的问题是数组键必须是唯一的,所以如果你有碰撞(例如"一"和"一"),你将失去除一个之外的所有.
Tyl*_*ter 108
function in_arrayi($needle, $haystack) {
return in_array(strtolower($needle), array_map('strtolower', $haystack));
}
Run Code Online (Sandbox Code Playgroud)
来自文档
gho*_*g74 93
你可以使用preg_grep():
$a= array(
'one',
'two',
'three',
'four'
);
print_r( preg_grep( "/ONe/i" , $a ) );
Run Code Online (Sandbox Code Playgroud)
Gaz*_*ler 47
function in_arrayi($needle, $haystack) {
return in_array(strtolower($needle), array_map('strtolower', $haystack));
}
Run Code Online (Sandbox Code Playgroud)
假设您要使用in_array,以下是如何使搜索大小写不敏感的方法.
不区分大小写的in_array():
foreach($searchKey as $key => $subkey) {
if (in_array(strtolower($subkey), array_map("strtolower", $subarray)))
{
echo "found";
}
}
Run Code Online (Sandbox Code Playgroud)
正常区分大小写:
foreach($searchKey as $key => $subkey) {
if (in_array("$subkey", $subarray))
{
echo "found";
}
}
Run Code Online (Sandbox Code Playgroud)