PHP范围问题

时间:2010-05-21 09:05:32

标签: php arrays scope

我正在尝试查看一系列记录(工作人员),在这个循环中,我调用一个函数,它返回另一个记录数组(每个工作人员的约会)。

foreach($staffmembers as $staffmember)
{   
        $staffmember['appointments'] = get_staffmember_appointments_for_day($staffmember);
        //  print_r($staffmember['appointments'] works fine 
}

这工作正常,但是,稍后在脚本中,我需要再次遍历记录,这次使用约会数组,但它们不可用。

foreach ($staffmembers as $staffmember)
{                                                             
        //do some other stuff
        //print_r($staffmember['appointments'] no longer does anything
}

通常,我会在第二个循环中执行第一个循环中的函数,但是这个循环已经嵌套在另外两个循环中,这将导致相同的sql查询运行168次。

有人可以建议解决方法吗?

非常感谢任何建议。

由于

1 个答案:

答案 0 :(得分:6)

foreach遍历数组的副本。如果您想更改该值,则需要reference

foreach($staffmembers as &$staffmember) // <-- note the &
{   
    $staffmember['appointments'] = get_staffmember_appointments_for_day($staffmember);
    //  print_r($staffmember['appointments'] works fine 
}

来自文档:

  

注意:除非引用了数组,否则foreach将对指定数组的副本进行操作,而不是数组本身。 foreach对数组指针有一些副作用。在foreach期间或之后不要依赖数组指针而不重置它。

  

从PHP 5开始,您可以通过$value前加&来轻松修改数组的元素。这将指定reference而不是复制值。