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