我有这个下面的代码:对于每个阵列修改
foreach ($animals as $animal) { $animal = getOffSpring($animal); }
因为我$动物设置一个新的字符串,我是否会修改阵列以及好吗?
我的运行表明我的数组保持不变,但我希望它用新值进行修改。这是错误吗?
换句话说,我希望我的阵列中的所有动物进行修改,以她们的后代
我有这个下面的代码:对于每个阵列修改
foreach ($animals as $animal) { $animal = getOffSpring($animal); }
因为我$动物设置一个新的字符串,我是否会修改阵列以及好吗?
我的运行表明我的数组保持不变,但我希望它用新值进行修改。这是错误吗?
换句话说,我希望我的阵列中的所有动物进行修改,以她们的后代
您可以使用一个参考。否则,如果忘记这一点,则会在循环之后保留对$animal
中最后一个数组元素的引用,如果您忘记这一点,则会引起恼人的问题,然后再使用$animal
作为别的。
另一种选择是使用所述密钥来代替它:由
foreach ($animals as $key => $animal) {
$animals[$key] = getOffSpring($animal);
}
我认为你正在试图做到这一点。
当你采用$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);
可以在阵列中使用一个参考值
foreach ($animals as &$animal) {
$animal = getOffSpring($animal);
}
号必须重写数组的值指数在哪里。 – Eugene
'array_map('getOffSpring',$ animals)'会做的事情 – AlecTMH