1

我有以下代码:

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

由于我将 $animal 设置为一个新字符串,我是否也要修改数组?

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

换句话说,我希望我的数组中的所有动物都被修改为它们的后代

4

3 回答 3

4

我认为您正在尝试这样做。
当您获取$animal变量并将其传递给函数或在foreach循环内修改它时,您将使用独立变量,该变量不会以$animals任何方式链接到数组(如果您自己不链接它),因此所有更改都应用于它,不要导致$animals数组的修改。

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

正如@AlecTMH 在他的评论中提到的,array_map这也是一个解决方案。

array_map( 'getOffSpring', $animals );
于 2012-12-29T14:26:06.477 回答
3

您可以使用参考:

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

unsetafter 循环清除引用。否则,您会在循环之后保留对最后一个数组元素的引用,$animal如果您忘记这一点,然后$animal稍后再用于其他事情,这将导致烦人的问题。

另一种选择是使用密钥来替换它:

foreach ($animals as $key => $animal) {
    $animals[$key] = getOffSpring($animal);
}
于 2012-12-29T14:26:56.710 回答
0

您可以使用对数组中值的引用

foreach ($animals as &$animal) {
    $animal = getOffSpring($animal);
}
于 2012-12-29T14:27:48.013 回答