我有以下代码:
foreach ($animals as $animal) { $animal = getOffSpring($animal); }
由于我将$ animal设置为新字符串,我还要修改数组吗?
我的运行表明我的数组保持不变,但我想用新值修改它。这是错误吗?
换句话说,我希望我的阵列中的所有动物都被修改为他们的后代
答案 0 :(得分:4)
我认为你正试图这样做
当您使用$animal
变量并将其传递给函数或在foreach
循环内修改它时,您使用的是自变量,它不会以任何方式链接到$animals
数组(如果您不要自己链接),因此应用的所有更改都不会导致修改$animals
数组。
foreach ( $animals as $i => $animal )
{
$animals[ $i ] = getOffSpring( $animal );
}
正如@AlecTMH在评论中提到的,array_map
也是一种解决方案。
array_map( 'getOffSpring', $animals );
答案 1 :(得分:3)
您可以使用参考:
foreach ($animals as &$animal) {
$animal = getOffSpring($animal);
}
unset($animal);
循环后unset
清除引用。否则,在循环之后保留对$animal
中最后一个数组元素的引用,如果您忘记了这一点,将导致恼人的问题,然后再使用$animal
来做其他事情。
另一个选择是使用密钥替换它:
foreach ($animals as $key => $animal) {
$animals[$key] = getOffSpring($animal);
}
答案 2 :(得分:0)
您可以使用对数组中值的引用
foreach ($animals as &$animal) {
$animal = getOffSpring($animal);
}