您好,登录后才能下订单哦!
密码登录
            
            
            
            
        登录注册
            
            
            
        点击 登录注册 即表示同意《亿速云用户服务条款》
        # 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进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。