PHP数组索引不幸

时间:2012-06-15 03:25:24

标签: php arrays null indexing

对于这个时髦的标题感到抱歉,我遇到了一个问题。首先,我设法解决了我的问题(撕掉我的代码之后),但我不知道为什么我的解决方案有效,我正在尝试将其视为一种学习体验。

我有一个从db收集信息的类。此类跟踪索引值,以便调用函数可以一次抓取一个结果。所以我的班级代码最初包含......

protected $index = NULL;
protected $array = array(stuff);

public function next_item()
{
    if($this->index == NULL)
    {//first time called
        $this->index = 0;
    }
    else
    {
        $this->index++;
    }

    if($this->index < sizeof($this->array))
    {
          return TRUE;
     }
      return FALSE;
 }

 public function get_result()
 {
      return $this->array[$this->index];
  }

调用函数有类似于

的东西
 while($myclass->next_item()){
        echo $myclass->get_result();
 }

当然,它涉及的内容要多得多,但这是问题代码(你明白了)。这段代码在我的项目中引发了一个无限循环(或一个外观)。我通过将$ index初始化为-1并删除条件检查null来修复我的问题。所以它现在......

protected $index = -1;

public function next_item()
{
    $this->index++;

    if($this->index < sizeof($this->array))
    {
          return TRUE;
    }
    return FALSE;
}

我的问题是,为什么这样做?当我检查时,索引从未在数组中引用,而它是NULL。始终在调用NULL的条件检查之后,发生了0的赋值。

我非常感谢你的时间,提前。试着把它变成一种学习体验,如果我理解为什么它有效,那就更好了,不仅如此。

如果这个问题在其他地方得到解答,我很抱歉,我无法弄清楚如何标记我的问题(如你所见),更不用说找到以前的答案了。

欢呼声, -David

1 个答案:

答案 0 :(得分:3)

您的问题是由PHP中的0 == NULL引起的。因此,当您在每次拨打0时反复将其设置为0时,将索引设置为next_item时,this->index == NULL将始终为真。

将测试更改为this->index === NULL也可以解决您的问题。请参阅this question,其中介绍了PHP中=====之间的区别。