20、PHP 原生魅力 - 数组 - 检查数组中是否包含指定元素

作者: 温新

图书: 【原生 PHP 魅力】

阅读: 139

时间: 2024-09-08 00:05:39

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() 函数执行的是“宽松”比较。这意味着 true1 被视为“相等”。

为什么这样呢?这是因为 PHP 在使用 == 进行宽松比较时遵循同样的规则,例如 (true == 1)true。如果你希望进行严格比较,你需要使用 ===,比如 (true === 1) 则是 false

对于 in_array() 函数,存在第三个(可选)参数 $strict,用于指定你希望执行严格比较。如果不指定或设置为 false,则默认执行宽松比较。如果你想进行严格比较,即同时检查值和类型都相等,你应该将 $strict 设置为 true。这样,像 true1 这样在宽松比较下被视为相等的值,在严格比较模式下就会被认为是不相等的。

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