array_search找不到第一个数组元素

时间:2019-02-18 21:56:09

标签: php arrays foreach

我一直在一个简单的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时按预期出现:

Array
(
    [0] => 74
    [1] => 75
    [2] => 76
    [3] => 77
    [4] => 78
    [5] => 79
    [6] => 80
    [7] => 81
)

问题是没有引发错误,循环正确地循环了1000个用户,但只排除了75至81个用户。我注意到只有第一个数组元素被“忽略”,因此我通过定义一个非现有的用户ID(0)作为第一个数组元素,这很有帮助。但是由于这是一个丑陋的解决方案,所以我一直在努力解决整个下午的问题。正如您可能在上面指出的那样,我没有使用严格的比较,所以这不应该成为问题。

在调试期间,我更改了代码以编写一些日志。每次检查用户ID并在$exclusions数组中不存在该用户ID时,都会添加一个日志条目。毫不奇怪,记录了“在排除中未找到74”。 我做了一些进一步的跟踪,只是发现在第一个数组元素上,IF子句的值为false。

在这一点上,这只是学术上的好奇心,因为这种丑陋的解决方法有效,但是有人知道为什么会发生这种情况吗?

0 个答案:

没有答案