array_search() 不区分大小写的版本

问题描述 投票:0回答:4

我有一个像这样的数组:

$array = ['oooo', 'no', 'mmmm', 'yes']; 

我想搜索一个词“是”。我知道

array_search()
,但我也想匹配“是”、“是”和“是”。

我该怎么做?

php arrays filtering case-insensitive
4个回答
194
投票
array_search(strtolower($search), array_map('strtolower', $array));

5
投票

您可以使用

in_array()
代替
array_search()

$response = in_array('yes', array_map('strtolower', $array));

0
投票

编辑:抱歉,我看到它是为了值,请参阅:http://php.net/manual/en/function.array-change-key-case.php#88648


对于钥匙:

$a = array('YES', 'yes', 'Yes'); 
$b = array_change_key_case($a, CASE_LOWER); 
$f = array_search(strtolower($search), $b);

0
投票

对于迭代任务来说,转换干草堆中所有值的大小写是不必要且低效的,一旦找到符合条件的值就可能停止。使用条件中断循环。 演示

$array = ['oooo', 'no', 'mmmm', 'yes'];
$needle = 'Yes';

foreach ($array as $i => $v) {
    if (stripos($v, $needle) !== false) {
        $found = $i;
        break;
    }
}
echo $found ?? 'Not found';
// output: 3

如果您想最小化全局范围的变量,请在“立即调用函数表达式”内部执行循环。 演示 echo (function($haystack, $needle) { foreach ($haystack as $i => $v) { if (stripos($v, $needle) !== false) { return $i; } } return null; })($array, $needle) ?? 'Not found'; // output: 3

© www.soinside.com 2019 - 2024. All rights reserved.