20、PHP 原生魅力 - 数组 - 检查数组中是否包含指定元素
in_array()
函数返回一个布尔值,如果元素值在数组中存在(注意:是作为数组的值,而非键),则返回 true
;如果元素不在数组中,则返回 false
。
<?php
$arr = ['a','b','c'];
$elementToFind= "z";
$inArray = in_array($elementToFind, $arr);
var_dump($inArray);
$elementToFind= "a";
$inArray = in_array($elementToFind, $arr);
var_dump($inArray);
输出如下:
$ php 20-inarray.php
bool(false)
bool(true)
严格比较
默认情况下,in_array()
函数执行的是“宽松”比较。这意味着 true
和 1
被视为“相等”。
为什么这样呢?这是因为 PHP 在使用 ==
进行宽松比较时遵循同样的规则,例如 (true == 1)
是 true
。如果你希望进行严格比较,你需要使用 ===
,比如 (true === 1)
则是 false
。
对于 in_array()
函数,存在第三个(可选)参数 $strict
,用于指定你希望执行严格比较。如果不指定或设置为 false
,则默认执行宽松比较。如果你想进行严格比较,即同时检查值和类型都相等,你应该将 $strict
设置为 true
。这样,像 true
和 1
这样在宽松比较下被视为相等的值,在严格比较模式下就会被认为是不相等的。
First | Second | 严格比较 | 宽松比较 |
---|---|---|---|
1 | ”1” | false | true |
null | array() | false | true |
true | 1 | false | true |
true | ”Something” | false | true |
<?php
$arr = [true, false, 0, 999, null, 'something'];
var_dump(in_array(111, $arr)); // true,因为第一个元素 true
var_dump(in_array(111, $arr, true));
var_dump(in_array(false, $arr));
var_dump(in_array(false, $arr, true));
var_dump(in_array(1, $arr));
var_dump(in_array(1, $arr, true));
var_dump(in_array('another string', $arr));
var_dump(in_array('another string', $arr, true));
var_dump(in_array([], $arr));
var_dump(in_array([], $arr, true));
输出如下:
$ php 20-inarray.php
bool(true)
bool(false)
bool(true)
bool(true)
bool(true)
bool(false)
bool(true)
bool(false)
bool(true)
bool(false)
区分大小写
in_array()
函数是区分大小写的,这意味着 "My Test" 和 "my tesT" 由于每个字符串首字母和末字母的大小写不同而被视为不同的值。
要实现不区分大小写的比较,一种方法是对数组中的“每个元素”使用 strtolower()
函数。这可以通过 array_map()
函数来处理。array_map()
函数会对数组中的每个元素应用一个函数,在这种情况下,该函数就是 strtolower()
。
<?php
$arr = ['My Test', 'second', 'third'];
var_dump(in_array('my tesT', $arr));
$boolResult = in_array(strtolower('my tesT'), array_map('strtolower', $arr));
var_dump($boolResult);
输出如下:
$ php 20-inarray.php
bool(false)
bool(true)
请登录后再评论