如何在PHP中查找数组中的值?in_array()和array_search()的应用

雪夜
发布: 2025-08-28 17:24:01
原创
261人浏览过
in_array()用于判断值是否存在并返回布尔值,array_search()则返回匹配值的键名,选择取决于是否需要获取位置信息。

如何在php中查找数组中的值?in_array()和array_search()的应用

在PHP中查找数组中的值,最常用且高效的两个内置函数是

in_array()
登录后复制
array_search()
登录后复制
。简单来说,
in_array()
登录后复制
用来判断某个值是否存在于数组中,返回一个布尔值;而
array_search()
登录后复制
则更进一步,它会返回匹配到的值的键名(或索引),如果没找到则返回
false
登录后复制
。选择哪个函数,完全取决于你想要达到的目的——是仅仅想知道“有没有”,还是想知道“在哪里”。

解决方案

PHP提供了两个核心函数来满足你在数组中查找值的需求。理解它们各自的特点和适用场景,能帮助你写出更健壮、更高效的代码。

1.

in_array()
登录后复制
:判断值是否存在

这个函数直观地回答了“数组里有没有这个东西?”的问题。

立即学习PHP免费学习笔记(深入)”;

  • 语法:
    in_array(mixed $needle, array $haystack, bool $strict = false): bool
    登录后复制
  • 参数说明:
    • $needle
      登录后复制
      :你要查找的值。
    • $haystack
      登录后复制
      :要搜索的数组。
    • $strict
      登录后复制
      (可选):一个布尔值。如果设置为
      true
      登录后复制
      in_array()
      登录后复制
      会进行严格类型检查(即
      ===
      登录后复制
      比较),值和类型都必须匹配。默认是
      false
      登录后复制
      ,只进行宽松比较(
      ==
      登录后复制
      )。
  • 返回值: 如果在数组中找到了
    $needle
    登录后复制
    ,返回
    true
    登录后复制
    ;否则返回
    false
    登录后复制

示例:

<?php
$fruits = ['apple', 'banana', 'orange', 'grape'];

// 查找 'banana'
if (in_array('banana', $fruits)) {
    echo "数组中包含香蕉。\n"; // 输出:数组中包含香蕉。
} else {
    echo "数组中不包含香蕉。\n";
}

// 查找 'kiwi'
if (in_array('kiwi', $fruits)) {
    echo "数组中包含猕猴桃。\n";
} else {
    echo "数组中不包含猕猴桃。\n"; // 输出:数组中不包含猕猴桃。
}

// 严格模式下的查找
$numbers = [1, '2', 3, '4'];
if (in_array('1', $numbers, true)) { // '1' (string) !== 1 (int)
    echo "严格模式下,找到了字符串 '1'。\n";
} else {
    echo "严格模式下,未找到字符串 '1'。\n"; // 输出:严格模式下,未找到字符串 '1'。
}

if (in_array(1, $numbers, true)) { // 1 (int) === 1 (int)
    echo "严格模式下,找到了整数 1。\n"; // 输出:严格模式下,找到了整数 1。
}
?>
登录后复制

我个人在用

in_array()
登录后复制
的时候,经常会忘记
strict
登录后复制
参数的重要性。尤其是在处理用户输入或者从数据库取出的数据时,类型可能会不经意间发生变化,导致非严格模式下的意外匹配。所以,如果对类型有明确要求,务必将
strict
登录后复制
设置为
true
登录后复制
,这能避免很多潜在的bug。

2.

array_search()
登录后复制
:查找值并返回其键名

AppMall应用商店
AppMall应用商店

AI应用商店,提供即时交付、按需付费的人工智能应用服务

AppMall应用商店56
查看详情 AppMall应用商店

当你不仅想知道值是否存在,还想知道它在数组中的具体位置(即键名或索引)时,

array_search()
登录后复制
就派上用场了。

  • 语法:
    array_search(mixed $needle, array $haystack, bool $strict = false): int|string|false
    登录后复制
  • 参数说明:
    • $needle
      登录后复制
      :你要查找的值。
    • $haystack
      登录后复制
      :要搜索的数组。
    • $strict
      登录后复制
      (可选):与
      in_array()
      登录后复制
      中的
      strict
      登录后复制
      参数功能相同。
  • 返回值: 如果在数组中找到了
    $needle
    登录后复制
    ,返回其对应的键名(可以是整数索引或字符串键)。如果没找到,返回
    false
    登录后复制

重要提示:

array_search()
登录后复制
在找到第一个匹配项后就会停止并返回其键名。由于键名可能是
0
登录后复制
(数组的第一个索引),而
0
登录后复制
在PHP的布尔上下文中会被视为
false
登录后复制
,所以在检查返回值时,务必使用严格比较
!== false
登录后复制
,而不是简单的
if ($key)
登录后复制
。这是一个非常常见的PHP陷阱!

示例:

<?php
$users = [
    'admin_id' => 101,
    'editor_id' => 102,
    'viewer_id' => 103,
    'guest_id' => 104
];

// 查找值为 102 的键名
$key = array_search(102, $users);
if ($key !== false) { // 注意这里使用了 !== false
    echo "值为 102 的键名是:{$key}\n"; // 输出:值为 102 的键名是:editor_id
} else {
    echo "未找到值为 102 的元素。\n";
}

// 查找一个不存在的值
$notFoundKey = array_search(999, $users);
if ($notFoundKey !== false) {
    echo "值为 999 的键名是:{$notFoundKey}\n";
} else {
    echo "未找到值为 999 的元素。\n"; // 输出:未找到值为 999 的元素。
}

// 考虑索引为 0 的情况
$list = ['apple', 'banana', 'orange'];
$index = array_search('apple', $list);
if ($index !== false) {
    echo "苹果的索引是:{$index}\n"; // 输出:苹果的索引是:0
} else {
    echo "未找到苹果。\n";
}

// 错误示范:如果使用 if ($index) 可能会导致问题
if ($index) { // $index 是 0,会被视为 false
    echo "错误示范:通过 if ($index) 找到了苹果。\n";
} else {
    echo "错误示范:通过 if ($index) 认为没找到苹果。\n"; // 这行会被执行,因为 0 被当成了 false
}
?>
登录后复制

说实话,

array_search()
登录后复制
=== false
登录后复制
判断,是我给新手讲PHP时必强调的一个点。多少次,我看到同事的代码因为没有用严格比较,导致数组第一个元素被误判为不存在。这真的是一个需要刻在脑子里的细节。

什么时候应该用in_array(),什么时候用array_search()?

选择

in_array()
登录后复制
还是
array_search()
登录后复制
,关键在于你的“意图”和“需求”。它们虽然都是查找,但侧重点不同。

选择

in_array()
登录后复制
的场景:

  • 只关心存在性: 当你仅仅需要知道某个值是否在数组中,而不需要知道它具体在哪个位置时,
    in_array()
    登录后复制
    是最佳选择。
    • 例子: 检查用户是否拥有某个特定的权限(
      if (in_array('admin_permission', $userPermissions)) { ... }
      登录后复制
      )。
    • 例子: 验证表单提交的选项是否在预定义的有效选项列表中。
  • 代码语义清晰:
    in_array()
    登录后复制
    的名称和返回值(布尔值)直接表达了“包含”的语义,让代码更易读懂。

以上就是如何在PHP中查找数组中的值?in_array()和array_search()的应用的详细内容,更多请关注php中文网其它相关文章!

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号