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)
请登录后再评论