PHP范围问题

Dan*_*Dan 2 php arrays scope

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

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

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

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

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

任何人都可以建议解决方法?

任何建议将不胜感激.

谢谢

Fel*_*ing 6

foreach迭代数组的副本.如果要更改值,则需要引用它:

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

从文档:

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

作为PHP 5的,可以方便地通过前述修改数组元素$value&.这将分配引用而不是复制值.