PHP in_array() / array_search() 奇怪的行为

2024-04-19

我在使用 PHP 函数时发现了一些奇怪的行为in_array()。我有一个像这样的数组:

$arr = [TRUE, "some string", "something else"];

现在如果我想检查是否"test"显然不在数组中,但是in_array()仍然返回 TRUE,这是为什么呢?

$result = in_array("test", $arr);
var_dump($result);  //Output: bool(true)

使用时也会发生同样的情况array_search():

$result = array_search("test", $arr);
var_dump($result);  //Output: int(0)

我想也许数组中的值 TRUE 会自动导致函数为每个结果返回 TRUE,而不检查数组的其余部分,但我找不到任何文档表明这个非常奇怪的功能。


函数的这种行为in_array() http://php.net/manual/en/function.in-array.php and array_search() http://php.net/manual/en/function.array-search.php不是错误,而是有据可查的行为。

这两个函数都有第三个可选参数,称为$strict默认情况下为 FALSE:

bool in_array (混合 $needle , 数组 $haystack[,布尔 $strict = FALSE ] )

混合 array_search ( 混合 $needle , 数组 $haystack[,布尔 $strict = false ] )

现在这意味着默认情况下两个函数都使用松散的(==) 比较来比较值。所以他们只检查值是否相同afterPHP 类型杂耍并且不检查类型。因为在你的例子中TRUE == "any none emtpy string"评估结果为 TRUE。

因此,通过在调用函数时将第三个参数设置为 TRUE,您可以说 PHP 应该使用 strict(===)比较,并且在比较时应该检查值和值的类型。

将此视为参考:PHP 相等(== 双等于)和恒等(=== 三等)比较运算符有何不同? https://stackoverflow.com/questions/80646/how-do-the-php-equality-double-equals-and-identity-triple-equals-comp

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PHP in_array() / array_search() 奇怪的行为 的相关文章

  • 如何使用mysqli准备好的语句?

    我正在尝试准备好的语句 但下面的代码不起作用 我收到错误 致命错误 在非对象上调用成员函数execute var www prepared php 第 12 行
  • PHP - 停止显示错误中的完整路径

    有什么方法可以告诉 PHP 不显示错误 警告或通知消息中存在任何错误的文件的完整路径 我知道我可以禁用错误 但是 只是为了避免任何风险 例如 我的脚本返回一个错误 显示如下 Fatal error Call to undefined fun
  • vb.net 从数组中删除第一个元素

    一种答案是创建一个短一个元素的新数组 还有其他更简单的方法可以做到这一点吗 您可以使用 LINQ 以非常简洁的代码生成结果 Dim a2 a Skip 1 ToArray 批评者可能会说这很慢 您应该使用Array Copy反而 Dim a
  • Laravel 5.5 多重身份验证路由问题

    尝试使用 Doctrine 而不是 Eloquent 让 Laravel 进行多重身份验证 我已经尝试了很多事情 但总是陷入困境 我目前定义了两个守卫 两个模型 两个登录控制器等 如果我启用其中之一 它们就会起作用 如果我同时尝试两者 则似
  • 如何将更改后的 SimpleXML 对象保存回文件?

    因此 我有这段代码 用于搜索 XML 文件中的特定节点 取消设置现有节点并插入具有正确数据的全新子节点 有没有办法使用 simpleXML 将这些新数据保存在实际的 XML 文件中 如果没有 是否有另一种有效的方法来做到这一点 public
  • 作曲家和 Yii

    我使用 Composer 作为我的依赖管理器 因为我需要使用 Yii Framework 进行开发 所以我将其添加到我的composer json 文件中 所以它看起来像这样 other properties require other d
  • 弹性搜索模糊匹配,精确匹配首先显示

    我想在查询中使用模糊匹配 但精确匹配显示在结果的顶部 我已经尝试过以下方法 return this gt client gt search array index gt self INDEX type gt self TYPE body g
  • PHP、MySQL、PDO 事务 - fetchAll() 可以在 commit() 之前吗?

    更多交易问题 我现在拥有的是一堆串在一起的查询 如果有任何失败 都会手动反转 代码块1 stmt1 db gt prepare Update table1 set col col 1 if stmt1 db gt execute stmt2
  • 将数组分成两半,数组总和相等或近似相等

    Problem 具有数值的数组需要分成两半 数组总和大约相等或可能相等 数组中元素的数量或顺序并不重要 probabilites array 0 4 0 15 0 1 0 1 0 2 0 2 0 3 1 45 probabilites 0
  • PHP - 计算特定数组值

    如何计算数组中值等于常量的元素的数量 例子 myArray array Kyle Ben Sue Phil Ben Mary Sue Ben 如何直接知道里面有多少个 Ben array array Kyle Ben Sue Phil Be
  • 如何通过csv文件仅更新sql表的一列

    我有一个 csv 文件包含一些数据 在我的 Sql 数据库中 我有一个具有多个列名的表 现在我只想通过 csv 文件更新一列 谢谢 你可以这样尝试 Import the csv file to a temp table Update you
  • 如何在 .net 中为 Google 云存储签名 url

    我想知道如何使用 net中的谷歌云存储类生成signurl 我已经根据要求创建了字符串 GET 1388534400 bucket objectname 但我现在想用 p12 密钥签署这个 url 然后想让它变得 url 友好 该库没有显示
  • 使用 php 和 jquery 的简单彗星示例

    谁能给我一个使用 PHP 的彗星技术的简单好例子 我只需要一个使用持久 HTTP 连接或类似连接的示例 我不想使用轮询技术 因为我已经设置了类似的东西 并且不仅难以使用和管理它的大量资源 另外我使用的是 IIS7 而不是 Apache 一个
  • 将 viewbag 转换为 javascript 数组

    我想将数据从 ViewBag mytags 获取到 Javascript 数组 但我无法执行此操作 function var sampleTags new Array var array Html Raw Json Encode ViewB
  • Java 数组返回奇怪的输出[重复]

    这个问题在这里已经有答案了 我正在为家庭作业问题创建一个方法 该方法返回数组中的最高值 我正在使用一个 for循环将数字输入到数组中 输入代码如下所示 int array new int n for i 0 i
  • mysql REGEXP 不匹配

    我有一个正则表达式 旨在捕获字符串中的电话号码 1 s d 3 s d 3 s d 4 我尝试使用以下查询在 MySql 数据库中查询此正则表达式 SELECT FROM everything instances meta AS m WHE
  • 根据用户投票移动 div

    我是新来的 但我喜欢这个网站 我检查了其他类似的问题 但没有看到我要找的东西 我是一名音乐家 有一段时间我一直在做 每日之歌 每天写一首小歌 我想将歌曲发布为 div 在里面 li 在 div 中 我只想要一个简单的 mp3 播放器和一个
  • 总小时数无法从 Android 插入 MySQL

    我使用以下公式获得总小时数 public void updateTotalHours int a SplitTime objMyCustomBaseAdapter getFistTime int b SplitTime objMyCusto
  • 更改创建 XML 读取器时使用的 XmlDictionaryReader Quotas 对象的 MaxArrayLength 属性

    我在向 C 服务发送 或接收 字节数组时遇到以下异常 There was an error deserializing the object of type System Byte The maximum array length quot
  • JS 中的展开/休息运算符如何工作? [复制]

    这个问题在这里已经有答案了 我正在努力完全理解扩展 休息运算符在 JS 中的工作原理 我已经阅读了 MDN 文档 但我仍然不完全清楚 我在下面提供了一个示例 我在其中使用了它并且它按预期工作 const users name Samir a

随机推荐