Answers:
您可以使用preg_grep()
:
$a= array(
'one',
'two',
'three',
'four'
);
print_r( preg_grep( "/ONe/i" , $a ) );
count(preg_grep('/^'.preg_quote($needle).'/$',$a)>0)
。那不是那么优雅。(注意,除非需要部分匹配,否则必须使用^和$字符。)但是,如果您实际上希望返回匹配的条目,则我喜欢这种解决方案。
显而易见的事情是将搜索词转换为小写:
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)]) {
...
这里唯一的问题是数组键必须是唯一的,因此,如果发生冲突(例如“一个”和“一个”),您将丢失除一个之外的所有键。
function in_arrayi($needle, $haystack) {
return in_array(strtolower($needle), array_map('strtolower', $haystack));
}
从文档
>
到每一行后,它可以正常工作。我只是习惯于手动将其>
放在第一行。
>
在每行的开头放置一个。
function in_arrayi($needle, $haystack) {
return in_array(strtolower($needle), array_map('strtolower', $haystack));
}
资料来源:php.net in_array手册页。
假设您要使用in_array,这是使搜索大小写不敏感的方法。
不区分大小写的in_array():
foreach($searchKey as $key => $subkey) {
if (in_array(strtolower($subkey), array_map("strtolower", $subarray)))
{
echo "found";
}
}
正常区分大小写:
foreach($searchKey as $key => $subkey) {
if (in_array("$subkey", $subarray))
{
echo "found";
}
}
如果我们假设数组只能包含字符串,但是数组也可以包含其他数组,则以上内容是正确的。另外in_array()函数可以接受$ needle的数组,因此如果$ needle是数组,则strtolower($ needle)不起作用,如果$ haystack包含其他数组,则array_map('strtolower',$ haystack)不起作用数组,但会导致“ PHP警告:strtolower()期望参数1为字符串,给定数组”。
例:
$needle = array('p', 'H');
$haystack = array(array('p', 'H'), 'U');
因此,我使用相关的方法创建了一个帮助程序类,以进行区分大小写和不区分大小写的in_array()检查。我还使用了mb_strtolower()而不是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;
}
}
}
我编写了一个简单的函数来检查下面代码中的数组中的不敏感值。
功能:
function in_array_insensitive($needle, $haystack) {
$needle = strtolower($needle);
foreach($haystack as $k => $v) {
$haystack[$k] = strtolower($v);
}
return in_array($needle, $haystack);
}
如何使用:
$array = array('one', 'two', 'three', 'four');
var_dump(in_array_insensitive('fOUr', $array));
/**
* in_array function variant that performs case-insensitive comparison when needle is a string.
*
* @param mixed $needle
* @param array $haystack
* @param bool $strict
*
* @return bool
*/
function in_arrayi($needle, array $haystack, bool $strict = false): bool
{
if (is_string($needle)) {
$needle = strtolower($needle);
foreach ($haystack as $value) {
if (is_string($value)) {
if (strtolower($value) === $needle) {
return true;
}
}
}
return false;
}
return in_array($needle, $haystack, $strict);
}
/**
* in_array function variant that performs case-insensitive comparison when needle is a string.
* Multibyte version.
*
* @param mixed $needle
* @param array $haystack
* @param bool $strict
* @param string|null $encoding
*
* @return bool
*/
function mb_in_arrayi($needle, array $haystack, bool $strict = false, ?string $encoding = null): bool
{
if (null === $encoding) {
$encoding = mb_internal_encoding();
}
if (is_string($needle)) {
$needle = mb_strtolower($needle, $encoding);
foreach ($haystack as $value) {
if (is_string($value)) {
if (mb_strtolower($value, $encoding) === $needle) {
return true;
}
}
}
return false;
}
return in_array($needle, $haystack, $strict);
}
return
。当只需要找到一根针时,在找到它之后保持迭代是没有意义的。我会修正一个错字,烘烤$ strict概念并做一些改进,也许接近3v4l.org/WCTi2。这篇文章并不完美,但它的心在正确的位置。
$a = [1 => 'funny', 3 => 'meshgaat', 15 => 'obi', 2 => 'OMER'];
$b = 'omer';
function checkArr($x,$array)
{
$arr = array_values($array);
$arrlength = count($arr);
$z = strtolower($x);
for ($i = 0; $i < $arrlength; $i++) {
if ($z == strtolower($arr[$i])) {
echo "yes";
}
}
};
checkArr($b, $a);
$ a = array('一个','两个','三个','四个');
$ b = in_array('ONE',$ a,false);
true
严格的类型比较时,例如'1' !== 1
。当使用false
类型杂耍时,例如'1' == 1
。有关文档,请参见php.net/in_array和php.net/manual/en/types.comparisons.php。