您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# PHP如何查询是否包含指定数组值
## 前言
在PHP开发中,数组是最常用的数据结构之一。经常需要判断一个数组中是否包含特定的值或元素。本文将详细介绍PHP中查询数组是否包含指定值的多种方法,包括内置函数、循环遍历以及性能对比等,帮助开发者选择最适合业务场景的方案。
---
## 一、使用in_array()函数
### 基本用法
`in_array()`是PHP最直接的数组查询函数:
```php
$fruits = ['apple', 'banana', 'orange'];
if (in_array('banana', $fruits)) {
echo '找到香蕉';
}
第三个参数开启严格类型检查:
$numbers = ['1', 2, 3];
var_dump(in_array(1, $numbers)); // true(弱类型)
var_dump(in_array(1, $numbers, true)); // false(严格模式)
返回第一个匹配元素的键名:
$colors = ['r' => 'red', 'g' => 'green'];
$key = array_search('green', $colors); // 返回'g'
if (array_search('value', $array) !== false) {
// 明确判断防止0键名误判
}
$user = ['name' => 'John', 'age' => 25];
isset($user['age']); // true
array_key_exists('age', $user); // true
函数 | 检查NULL值 | 性能 |
---|---|---|
isset() | 返回false | 更快 |
array_key_exists() | 返回true | 略慢 |
function customInArray($needle, $haystack) {
foreach ($haystack as $item) {
if ($item === $needle) {
return true;
}
}
return false;
}
将值转为键名实现O(1)查询:
$flipped = array_flip($fruits);
isset($flipped['banana']); // true
$largeArray = range(1, 10000);
// 测试in_array
$start = microtime(true);
in_array(9999, $largeArray);
$time1 = microtime(true) - $start;
// 测试array_flip+isset
$start = microtime(true);
$flipped = array_flip($largeArray);
isset($flipped[9999]);
$time2 = microtime(true) - $start;
方法 | 1000元素 | 10000元素 | 100000元素 |
---|---|---|---|
in_array() | 0.0002 | 0.0021 | 0.021 |
array_flip()+isset() | 0.0001 | 0.0003 | 0.002 |
$users = [
['id' => 1, 'name' => 'Tom'],
['id' => 2, 'name' => 'Jerry']
];
$names = array_column($users, 'name');
in_array('Tom', $names); // true
function deepInArray($value, $array) {
foreach ($array as $item) {
if (is_array($item) ? deepInArray($value, $item) : $item === $value) {
return true;
}
}
return false;
}
$allowedExtensions = ['jpg', 'png', 'gif'];
if (!in_array($fileExt, $allowedExtensions)) {
throw new Exception('文件类型不支持');
}
$existingEmails = array_column($users, 'email');
if (!in_array($newEmail, $existingEmails)) {
$db->insert($newUser);
}
in_array()
array_search()
array_flip()+isset()
array_column()
array_flip()
预处理ArrayObject
类”`
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。