php - array_search 没有找到第一个数组元素
问题描述
我在一个简单的 PHP 代码片段上遇到了这种奇怪的行为。我有一个foreach
循环需要遍历多个用户并为每个用户增加一个变量,除非用户的 id 是给定数组的成员。
现在,foreach 正在遍历 ID 为 1 到 1000 的用户,它工作正常,除了用户 ID 74 应该被跳过但不是。正确跳过 ID 为 75-81 的用户
编码:
$exceptions = array(74,75,76,77,78,79,80,81);
foreach ($users as $u)
{
if (array_search($u->id, $exceptions) == false)
{
// not found on the array, so no skipping
$i++;
}
}
以上是对代码的过度简化,但它有助于重现问题。该数组是从单独的数据库查询动态形成的,并且格式正确。当print_r
为数组做 a 时按预期出现:
Array
(
[0] => 74
[1] => 75
[2] => 76
[3] => 77
[4] => 78
[5] => 79
[6] => 80
[7] => 81
)
问题是没有抛出错误,循环正确地遍历了 1000 个用户,但只排除了用户 75 到 81。我注意到只有第一个数组元素被“忽略”,所以我通过定义一个不存在的用户 ID 来解决这个问题(0) 作为第一个数组元素,这很有帮助。但由于这是一个丑陋的解决方案,我整个下午都在试图解决这个问题。正如您在上面可能注意到的,我没有使用严格的比较,所以这不应该是问题。
在调试期间,我更改了代码以编写一些日志。每次检查用户 ID 并且该用户 ID 不存在于$exclusions
数组中时,都会添加一个日志条目。不出所料,记录了“在排除项中未找到 74”。我做了一些进一步的跟踪,只是发现在第一个数组元素上,IF 子句评估为假。
在这一点上,这只是学术上的好奇心,因为丑陋的解决方法有效,但有人知道为什么会发生这种情况吗?
解决方案
推荐阅读
- matrix - Torch 对除索引之外的每一行求和
- r - 在 mapEdit 包中使用 EditMod 时从 $finished 刷新数据的闪亮解决方法
- npm - 显示 Fabric 钱包时出错:EACCES:权限被拒绝,打开 '${Private key path}'
- python - Django 静态文件未使用 NGINX 加载
- r - 在 R 中解析 150Kbyte 文本非常慢
- sql - SQL Server Pivot 在两列上
- python - 如何将 .zst 文件提取到熊猫数据框中
- visual-studio - CreateAppHost 任务意外失败。MSB4018
- directory - 如何删除 GodMode 目录 {241D7C96-F8BF-4F85-B01F-E2B043341A4B}
- regex - 正则表达式强制消息长度