我正在尝试查看一系列记录(工作人员),在这个循环中,我调用一个函数,它返回另一个记录数组(每个工作人员的约会)。
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次。
有人可以建议解决方法吗?
非常感谢任何建议。
由于
答案 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而不是复制值。