2012-12-29 63 views
1

我有这个下面的代码:对于每个阵列修改

foreach ($animals as $animal) { 
    $animal = getOffSpring($animal); 
} 

因为我$动物设置一个新的字符串,我是否会修改阵列以及好吗?

我的运行表明我的数组保持不变,但我希望它用新值进行修改。这是错误吗?

换句话说,我希望我的阵列中的所有动物进行修改,以她们的后代

+0

号必须重写数组的值指数在哪里。 – Eugene

+3

'array_map('getOffSpring',$ animals)'会做的事情 – AlecTMH

回答

3

您可以使用一个参考。否则,如果忘记这一点,则会在循环之后保留对$animal中最后一个数组元素的引用,如果您忘记这一点,则会引起恼人的问题,然后再使用$animal作为别的。

另一种选择是使用所述密钥来代替它:由

foreach ($animals as $key => $animal) { 
    $animals[$key] = getOffSpring($animal); 
} 
4

我认为你正在试图做到这一点。
当你采用$animal变量并将其传递给一个函数或修改它在foreach循环内时,你可以使用独立变量,它不以任何方式链接到$animals数组(如果你自己没有链接),因此所有对其应用的更改不会导致修改$animals阵列。

foreach ($animals as $i => $animal) 
{ 
    $animals[ $i ] = getOffSpring($animal); 
} 

作为@AlecTMH在他的评论中提到,array_map也是一个解决方案。循环清除引用后

foreach ($animals as &$animal) { 
    $animal = getOffSpring($animal); 
} 
unset($animal); 

unset

array_map('getOffSpring', $animals); 
0

可以在阵列中使用一个参考值

foreach ($animals as &$animal) { 
    $animal = getOffSpring($animal); 
}